Вызов хранимой процедуры в Oracle с параметрами IN и OUT
У меня есть эта процедура:
CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;
Поэтому, когда я запускаю его так, он абсолютно ничего не возвращает:
DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;
BTW Я использую DreamCoder для Oracle. Есть ли проблема с самой процедурой или с тем, как я ее называю? В таблице INVOICE есть запись с INVOICE_NR, равной 1000001.
Ответы
Ответ 1
Если вы установите выход сервера в режиме ON перед всем кодом, он работает, иначе put_line() не будет работать. Попробуйте!
Код,
set serveroutput on;
CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;
И затем вызовите функцию как есть:
DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;
Ответ 2
У меня такая же проблема. Я использовал триггер, и в этом триггере я вызвал процедуру, которая вычисляла некоторые значения в две переменные OUT. Когда я попытался напечатать результат в теле триггера, на экране ничего не показывалось. Но затем я решил эту проблему, сделав 2 локальные переменные в функции, вычислил с ними то, что мне нужно, и, наконец, скопировал эти переменные в переменные вашей процедуры OUT. Надеюсь, это будет полезно и успешно!
Ответ 3
Перейдите в Инструмент меню → Вывод SQL, Запустите инструкцию PL/SQL,
вывод будет отображаться на панели вывода SQL.