MySQL1)创建存储过程,给定书号,到库存表中统计其数量,并用此数量修图书表中该书的数量。调用该存储过程,修正书号为“A0120”的图书的数量。 2)创建存储过程,对于读者编号,逐条检查借阅表中该读者的借阅情况:还书日期的空控记录,借阅天数=系统日期-借阅日期,如借阅天数<15天,则输出“正常”;15天≤借阅天数<30天,则输出“通知还书”;借阅天数>30天,则输出“逾期”。调用该存储过程,测试读者编号为"0001”的借阅情况。
时间: 2024-02-17 19:59:44 浏览: 88
以下是两个MySQL存储过程的代码实现:
1. 修正书号为“A0120”的图书数量
```mysql
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE update_book_quantity(IN book_id VARCHAR(10))
BEGIN
DECLARE stock_qty INT;
-- 统计库存表中该书的数量
SELECT quantity INTO stock_qty FROM stock WHERE book_id = book_id;
-- 更新图书表中该书的数量
UPDATE book SET quantity = stock_qty WHERE book_id = book_id;
END //
DELIMITER ;
-- 调用存储过程,修正书号为“A0120”的图书数量
CALL update_book_quantity('A0120');
```
2. 检查读者编号为"0001"的借阅情况
```mysql
-- 创建存储过程
DELIMITER //
CREATE PROCEDURE check_borrow_status(IN reader_id VARCHAR(10))
BEGIN
DECLARE borrow_date DATE;
DECLARE return_date DATE;
DECLARE borrow_days INT;
-- 遍历借阅表中该读者的借阅情况
DECLARE cur CURSOR FOR SELECT borrow_date, return_date FROM borrow WHERE reader_id = reader_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1;
SET @finished = 0;
OPEN cur;
REPEAT
FETCH cur INTO borrow_date, return_date;
IF NOT @finished THEN
-- 计算借阅天数
SET borrow_days = DATEDIFF(CURRENT_DATE(), borrow_date);
-- 输出借阅状态
CASE
WHEN borrow_days < 15 THEN SELECT '正常';
WHEN borrow_days >= 15 AND borrow_days < 30 THEN SELECT '通知还书';
ELSE SELECT '逾期';
END CASE;
END IF;
UNTIL @finished END REPEAT;
CLOSE cur;
END //
DELIMITER ;
-- 调用存储过程,检查读者编号为"0001"的借阅情况
CALL check_borrow_status('0001');
```
阅读全文