【发布时间】:2017-02-01 23:57:45
【问题描述】:
我已经创建了一个图书馆系统,我正在尝试设置一个程序,该程序允许您输入 isbn 和学号,然后它会检查数据库以查看该书是否可用,如果可用,请预订。如果没有,则给出错误消息。
我的表格如下:
- 书 - pk_isbn,作者,书名
- 复制 - pk_code、持续时间、fk_isbn
- 贷款 - fk_code、fk_no、pk_taken、due、return_date
- 学生 - pk_no,姓名,学校,allowtobook
这是我目前拥有的代码 *有些只是我猜的伪代码,因为它目前根本不起作用。
DELIMITER $$
CREATE PROCEDURE issue_loan (IN book_isbn CHAR(17), IN stu_no INT)
BEGIN
DECLARE availablebooks INT;
DECLARE allowedtobook BIT;
SET availablebooks = (SELECT DISTINCT
c.isbn
FROM
loan l
INNER JOIN
student s ON l.no = s.no
INNER JOIN
copy c ON l.code = c.code
WHERE
return_date IS NOT NULL);
IF(availablebooks = book_isbn) AND s.embargo = 0 THEN
INSERT INTO loan VALUES
(code, stu_no, CURDATE(), CURDATE()+c.duration,'');
ELSE
SIGNAL SQLSTATE '450000' SET MESSAGE_TEXT ='no Books Available';
END IF;
END$$
return_date IS NOT NULL 部分应该是正确的,因为它会找到尚未归还的任何书籍。这意味着他们目前已被预订一空。
【问题讨论】:
-
这里真的没有任何程序,是吗?你不需要程序。你只需要一个查询。