CREATE PROCEDURE 图书信息模糊查询(IN mb VARCHAR(10),IN str VARCHAR(30)) BEGIN CASE mb WHEN '书名' THEN SELECT* FROM `图书信息表` WHERE '书名'LIKE CONCAT('%',str,'%'); WHEN '作者' THEN SELECT*FROM `图书信息表` WHERE '作者'LIKE CONCAT('%',str,'%'); WHEN '出版社' THEN SELECT*FROM `图书信息表` WHERE '出版社'LIKE CONCAT('%',str,'%'); WHEN '图书分类' THEN SELECT*FROM `图书信息表` WHERE '图书分类'LIKE CONCAT('%',str,'%'); END CASE; END; CALL 图书信息模糊查询('书名','高等');为什么除了出版社分支其他分支都无法达到预想中的结果
时间: 2023-08-06 16:22:02 浏览: 76
这是因为在查询语句中,书名、作者和图书分类都被写成了字符串常量,而不是字段名。正确的写法应该是将这些字段名去掉引号,如下所示:
```
CREATE PROCEDURE 图书信息模糊查询(IN mb VARCHAR(10),IN str VARCHAR(30))
BEGIN
CASE mb
WHEN '书名' THEN SELECT * FROM `图书信息表` WHERE 书名 LIKE CONCAT('%',str,'%');
WHEN '作者' THEN SELECT * FROM `图书信息表` WHERE 作者 LIKE CONCAT('%',str,'%');
WHEN '出版社' THEN SELECT * FROM `图书信息表` WHERE 出版社 LIKE CONCAT('%',str,'%');
WHEN '图书分类' THEN SELECT * FROM `图书信息表` WHERE 图书分类 LIKE CONCAT('%',str,'%');
END CASE;
END;
```
这样就可以正确地根据给定的查询字段进行模糊查询了。
相关问题
CREATE PROCEDURE 修改图书信息(in tsh char(6),in mb varchar(10),in str varchar(30)) BEGIN CASE mb WHEN '作者' THEN UPDATE 图书信息表 SET 作者=str WHERE 图书号=tsh; WHEN '出版社' THEN UPDATE 图书信息表 SET 出版社=str WHERE 图书号=tsh; WHEN '图书分类' THEN UPDATE 图书信息表 SET 图书分类=str WHERE 图书号=tsh; WHEN '书名' THEN UPDATE 图书信息表 SET 书名=str WHERE 图书号=tsh; END CASE; END; call 修改图书信息(0002,'作者','ssx');
该存储过程看起来没有什么问题。如果你想要修改图书信息表中图书号为 0002 的记录的作者为 "ssx",可以使用 `CALL` 语句调用该存储过程:
```
CALL 修改图书信息('0002', '作者', 'ssx');
```
请注意,`char(6)` 类型的参数需要用引号括起来,表示为字符串类型。另外,存储过程中的 `CASE` 语句中的条件值直接写,不需要再用 `=`。
CREATE PROCEDURE proc6(in couid1 varchar(20),out num int) begin declare a varchar(20) DEFAULT ''; if (couid1==a) then select count(*) 人数 from scores; else select count(*) 人数 from scores where couid=couid1; end if; end怎么才能实现if语句中的等于
在 MySQL 存储过程中,可以使用 `=` 或 `LIKE` 操作符来进行等于判断。在你的存储过程中,你可以使用 `=` 来判断 couid1 是否等于 a。注意,在 MySQL 中,字符串的比较是区分大小写的。
下面是修改后的存储过程代码:
```
CREATE PROCEDURE proc6(in couid1 varchar(20),out num int)
BEGIN
DECLARE a varchar(20) DEFAULT '';
IF (couid1 = a) THEN
SELECT COUNT(*) AS 人数 FROM scores;
ELSE
SELECT COUNT(*) AS 人数 FROM scores WHERE couid = couid1;
END IF;
END
```
在上面的代码中,我使用了 `AS` 关键字来给查询结果的列起别名,这样可以使结果更加易读。另外,你需要注意在 `DECLARE` 语句中定义变量时,需要加上 `DEFAULT` 关键字来指定变量的默认值。
阅读全文