Подтвердить что ты не робот

Вызов хранимой процедуры в 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.

4b9b3361

Ответ 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.