创建存储过程,给定书号,到库存表中统计其数量,并用此数量修改图书表中该书的数量。调用该存储过程,修正书号为“A0120”的图书的数量。 (2)创建存储过程,对于读者编号,逐条检查借阅表中该读者的借阅情况:还书日期为空记录,借阅天数=系统日期-借阅日期,如借阅天数<15 天,则输出“正常”;15 天≤借阅天数≤30 天,则输出“通知还书”;借阅天数>30 天,则输出“逾期”。调用该存储过程,测试读者编号为“0001”的借阅情况。
时间: 2024-03-17 07:40:47 浏览: 79
好的,我明白了你的问题。以下是对应的两个存储过程:
1. 修改图书数量的存储过程:
```sql
CREATE PROCEDURE update_book_quantity
@book_id varchar(10)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @quantity int
-- 统计库存表中该书的数量
SELECT @quantity = SUM(quantity)
FROM inventory
WHERE book_id = @book_id
-- 修改图书表中该书的数量
UPDATE books
SET quantity = @quantity
WHERE book_id = @book_id
END
```
你可以通过以下命令来调用该存储过程,修正书号为“A0120”的图书的数量:
```sql
EXEC update_book_quantity 'A0120';
```
2. 检查借阅情况的存储过程:
```sql
CREATE PROCEDURE check_borrow_status
@reader_id varchar(10)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @borrow_date date
DECLARE @return_date date
DECLARE @borrow_days int
-- 逐条检查借阅表中该读者的借阅情况
DECLARE cur_borrow CURSOR FOR
SELECT borrow_date, return_date
FROM borrow
WHERE reader_id = @reader_id
OPEN cur_borrow
FETCH NEXT FROM cur_borrow INTO @borrow_date, @return_date
WHILE @@FETCH_STATUS = 0
BEGIN
-- 计算借阅天数
IF @return_date IS NULL
SET @borrow_days = DATEDIFF(day, @borrow_date, GETDATE())
ELSE
SET @borrow_days = DATEDIFF(day, @borrow_date, @return_date)
-- 输出借阅情况
IF @borrow_days < 15
PRINT '正常'
ELSE IF @borrow_days >= 15 AND @borrow_days <= 30
PRINT '通知还书'
ELSE
PRINT '逾期'
FETCH NEXT FROM cur_borrow INTO @borrow_date, @return_date
END
CLOSE cur_borrow
DEALLOCATE cur_borrow
END
```
你可以通过以下命令来调用该存储过程,测试读者编号为“0001”的借阅情况:
```sql
EXEC check_borrow_status '0001';
```
阅读全文