【发布时间】:2020-04-27 00:05:01
【问题描述】:
我正在尝试创建一个函数来检查 book 表中是否存在一本书的键,如果存在,它会确定该书在库存表中的数量,以及已售出的数量购买的物品表。当我尝试运行我当前的代码时,每次运行它时都会显示“结果包含多于一行”,无论值如何。我不清楚如何调整它。
DELIMITER //
CREATE FUNCTION quantity_on_stock(
book_key INT
)
RETURNS INT
READS SQL DATA
BEGIN
DECLARE num_books_recieved INT;
DECLARE num_books_sold INT;
DECLARE book_key_var INT;
DECLARE book_inventory_key_var INT;
SELECT book_key
INTO book_key_var
FROM books
WHERE book_key = books.book_key;
IF book_key = book_key_var THEN
SELECT quantity INTO num_books_recieved FROM book_inventory bi WHERE book_key = bi.book_key;
SELECT book_inventory_key INTO book_inventory_key_var FROM book_inventory bi WHERE book_key = bi.book_key;
SELECT quantity INTO num_books_sold FROM purchase_items pi WHERE book_inventory_key_var = pi.book_inventory_key;
END IF;
RETURN (num_books_recieved - num_books_sold);
END//
DELIMITER ;
Book_key 是图书库存表中的 FK。 Book_inventory_key 是 purchase_items 表中的一个外键。
【问题讨论】:
-
错误信息的哪一部分你不明白?您正在使用
into并且可能会获得多行。 -
如果不使用 INTO 语句,我不确定如何编写。
标签: mysql sql stored-functions