写一个存储过程,编写代码完成图书馆还书业务 输入参数: rid,bid 逻辑步骤: 1.判断当前rid,bid的借阅是否存在,如果存在做 下面的操作 1.1以当前的借阅数据为依据生成一条历史订单数据 1.2更新bid的在馆状态 1.3如果有逾期,刚更新读者的逾期次数 1.4删除借阅表中的相应记录
时间: 2024-03-07 20:46:57 浏览: 127
好的,以下是存储过程的代码:
```
CREATE PROCEDURE return_book
@rid INT,
@bid INT
AS
BEGIN
DECLARE @borrow_date DATETIME
DECLARE @return_date DATETIME
DECLARE @is_late BIT
DECLARE @overdue_count INT
-- 判断当前借阅是否存在
IF NOT EXISTS (SELECT * FROM borrow WHERE rid = @rid AND bid = @bid)
BEGIN
PRINT '当前借阅不存在'
RETURN
END
-- 获取当前借阅信息
SELECT @borrow_date = borrow_date, @return_date = return_date, @is_late = is_late, @overdue_count = overdue_count FROM borrow WHERE rid = @rid AND bid = @bid
-- 生成历史订单数据
INSERT INTO order_history (rid, bid, borrow_date, return_date, is_late, overdue_count)
VALUES (@rid, @bid, @borrow_date, GETDATE(), @is_late, @overdue_count)
-- 更新图书在馆状态
UPDATE book SET is_available = 1 WHERE id = @bid
-- 更新读者逾期次数
IF @is_late = 1
BEGIN
UPDATE reader SET overdue_count = overdue_count + 1 WHERE id = @rid
END
-- 删除借阅记录
DELETE FROM borrow WHERE rid = @rid AND bid = @bid
PRINT '还书成功'
END
```
存储过程的功能是根据输入的读者 ID 和图书 ID,判断当前借阅是否存在,如果存在则以当前的借阅数据为依据生成一条历史订单数据,更新图书在馆状态,如果有逾期,更新读者的逾期次数,最后删除借阅表中的相应记录。
阅读全文