分析并纠错:CREATE PROCEDURE 还书(in lb char(2),in dh int) BEGIN CASE lb WHEN '学生' THEN DECLARE sh CHAR(10) DECLARE hm varchar(20) set sh=(SELECT 图书号 FROM `学生借阅信息表` WHERE 订单号=dh); set hm=(SELECT 学号 FROM `学生借阅信息表` WHERE 订单号=dh); UPDATE 图书信息表 SET 库存=库存+1 WHERE 图书号=sh UPDATE 学生借阅信息表 SET `是否归还`=1,`还书时间`=NOW(),`是否超期`=DAY(NOW())-DAY(`应还时间`) where `图书号`=sh and `学号`=hm; UPDATE 图书统计表 SET `在借图书数量`=`在借图书数量`-1,`现存图书数量`=`现存图书数量`+1; IF (SELECT DAY(还书时间)-DAY(`应还时间`) FROM 学生借阅信息表 WHERE 订单号=dh)>0 then UPDATE 学生账单表 SET 待缴付=`待缴付`+5 WHERE 学号=hm; END IF; WHEN '教工' THEN DECLARE sh CHAR(10) DECLARE hm varchar(20) set sh=(SELECT 图书号 FROM `教师借阅信息表` WHERE 订单号=dh); set hm=(SELECT 教工号 FROM `教师借阅信息表` WHERE 订单号=dh); UPDATE 图书信息表 SET 库存=库存+1 WHERE 图书号=sh; UPDATE 教师借阅信息表 SET `是否归还`=1,`还书时间`=NOW(),`是否超期`=DAY(NOW())-DAY(`应还时间`) where `图书号`=sh and `教工号`=hm; UPDATE 图书统计表 SET `在借图书数量`=`在借图书数量`-1,`现存图书数量`=`现存图书数量`+1; IF (SELECT DAY(还书时间)-DAY(`应还时间`) FROM教工借阅信息表 WHERE 订单号=dh)>0 then UPDATE 教工账单表 SET 待缴付=`待缴付`+5 WHERE 教工号=hm; END IF; WHEN '教工' THEN END CASE; END;
时间: 2023-07-26 07:03:43 浏览: 146
分析并纠错:
1. 存储过程名称应该是 `还书` 而不是 `CREATE PROCEDURE 还书`。
2. 当 `CASE` 语句中的 `WHEN` 是 '学生' 时,语句块的最后没有 `END IF;` 语句。
3. 当 `CASE` 语句中的 `WHEN` 是 '教工' 时,第二个 `WHEN` 写错了,应该是 `ELSE`。
4. 在第 17 行的 SQL 语句中,缺少 `;` 符号。
5. 在第 19 行的 SQL 语句中,SELECT 语句中的表名写错了,应该是 `教师借阅信息表`。
6. 在第 21 行的 SQL 语句中,少了一个 `;` 符号。
7. 在第 23 行的 SQL 语句中,SELECT 语句中的表名写错了,应该是 `教工借阅信息表`。
下面是已经修改过的存储过程代码:
```
CREATE PROCEDURE 还书(in lb char(2),in dh int)
BEGIN
CASE lb
WHEN '学生' THEN
DECLARE sh CHAR(10);
DECLARE hm varchar(20);
set sh=(SELECT 图书号 FROM `学生借阅信息表` WHERE 订单号=dh);
set hm=(SELECT 学号 FROM `学生借阅信息表` WHERE 订单号=dh);
UPDATE 图书信息表 SET 库存=库存+1 WHERE 图书号=sh;
UPDATE 学生借阅信息表 SET `是否归还`=1,`还书时间`=NOW(),`是否超期`=DAY(NOW())-DAY(`应还时间`) where `图书号`=sh and `学号`=hm;
UPDATE 图书统计表 SET `在借图书数量`=`在借图书数量`-1,`现存图书数量`=`现存图书数量`+1;
IF (SELECT DAY(还书时间)-DAY(`应还时间`) FROM 学生借阅信息表 WHERE 订单号=dh)>0 THEN
UPDATE 学生账单表 SET 待缴付=`待缴付`+5 WHERE 学号=hm;
END IF;
WHEN '教工' THEN
DECLARE sh CHAR(10);
DECLARE hm varchar(20);
set sh=(SELECT 图书号 FROM `教师借阅信息表` WHERE 订单号=dh);
set hm=(SELECT 教工号 FROM `教师借阅信息表` WHERE 订单号=dh);
UPDATE 图书信息表 SET 库存=库存+1 WHERE 图书号=sh;
UPDATE 教师借阅信息表 SET `是否归还`=1,`还书时间`=NOW(),`是否超期`=DAY(NOW())-DAY(`应还时间`) where `图书号`=sh and `教工号`=hm;
UPDATE 图书统计表 SET `在借图书数量`=`在借图书数量`-1,`现存图书数量`=`现存图书数量`+1;
IF (SELECT DAY(还书时间)-DAY(`应还时间`) FROM 教师借阅信息表 WHERE 订单号=dh)>0 THEN
UPDATE 教工账单表 SET 待缴付=`待缴付`+5 WHERE 教工号=hm;
END IF;
ELSE
END CASE;
END;
```
阅读全文