您好我正在尝试编写一个程序,从我创建的表中检索特定图书的副本数。
create or replace PROCEDURE book_count(c_isbn IN book_copies.isbn%TYPE)
IS
total number;
BEGIN
SELECT COUNT (*)
FROM book_copies
WHERE isbn = c_isbn;
DBMS_OUTPUT.PUT_LINE('Book count: ' || total);
END book_count;
我遇到的错误是SELECT语句中需要一个INTO子句,但我似乎无法完成它。任何帮助表示赞赏!
答案 0 :(得分:2)
create or replace PROCEDURE book_count(c_isbn IN book_copies.isbn%TYPE)
IS
total number;
BEGIN
SELECT COUNT(*) INTO TOTAL
FROM book_copies
WHERE isbn = c_isbn;
DBMS_OUTPUT.PUT_LINE('Book count: ' || total);
END book_count;
答案 1 :(得分:0)
你不能在开始结束块中使用纯SQL。您需要在into clause
中插入尽可能多的变量,在选择后立即插入,它与您选择的列数相匹配。
你需要做
SELECT COUNT (*)
into total
FROM book_copies
WHERE isbn = c_isbn;
或
for i in (
SELECT COUNT (*) count
FROM book_copies
WHERE isbn = c_isbn;
)
loop
total := i.count;
end loop;
请记住,上面一个可以抛出两个异常,no_data_found和to_many_rows,而循环必须手动注意到这个“错误”。