2016-02-22 2 views
-2

Привет Я пытаюсь написать процедуру, которая извлекает количество копий определенной книги из созданной таблицы.Как получить количество копий книги PLSQL

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; 

Ошибка у меня является то, что INTO пункта ожидается в ЗЕЬЕСТЕ, но я не могу показаться, чтобы сделать это. Любая помощь приветствуется!

+0

https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/13_elems045.htm –

ответ

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; 
+0

@Aleksej Bro, INTO TOTAL добавлен мной, его нет в актуальном вопросе. –

+0

Спасибо, что Into - это то, чего мне не хватало, но похоже, что он не выводит фактические результаты в скрипте Output? – Pez

+0

Каков фактический результат и какова ценность, которую вы получаете? Можете ли вы предоставить скриншот? –

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, в то время как цикл должен заметить эту «ошибку» вручную.

+0

Спасибо, что Into - это то, что мне не хватало, но похоже, что он не выводит фактические результаты в сценарии Output? – Pez