2012-04-05 20 views
28

Mam tę procedurę:Wywołanie procedury przechowywanej w Oracle i obecnie Parametry

CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER) 
AS BEGIN 
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr; 
END; 

Więc kiedy go uruchomić w ten sposób zwraca absolutnie nic:

DECLARE 
    amount NUMBER; 
BEGIN 
    PROC1(1000001, amount); 
    dbms_output.put_line(amount); 
END; 

BTW używam DreamCoder dla Wyrocznia. Czy jest problem z samą procedurą lub ze sposobem, w jaki ją nazywam? W tabeli INVOICE znajduje się wpis z INVOICE_NR równym 1000001.

+2

Jeśli uruchomisz "begin dbms_output.put_line ('output test') end;" widzisz wynik? Ta procedura i sposób jej wywoływania jest całkowicie poprawny. – arturro

+0

Uruchomiłem to w ten sposób, ale nie widzę wyjścia. Czy to możliwe, że DreamCoder nie wyświetla wyniku put_line()? – RegedUser00x

+0

Nie próbowałem z 'BEGIN dbms_output.put_line ('hi'); END; 'i nic nie pokazuje. – RegedUser00x

Odpowiedz

1

Przejdź do menu Narzędzia -> SQL Output, uruchom instrukcję PL/SQL, dane wyjściowe zostaną wyświetlone na panelu Wyjście SQL.

34

Jeśli ustawisz wyjście serwera w trybie ON przed całym kodem, działa, w przeciwnym razie put_line() nie będzie działać. Spróbuj!

Kod jest

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; 

a następnie wywołać funkcję, jak to jest:

DECLARE 
amount NUMBER; 
BEGIN 
PROC1(1000001, amount); 
dbms_output.put_line(amount); 
END; 
2

miałem takie same problem.I użył spust iw tym spuście Zadzwoniłem procedurę które obliczyć niektóre wartości w 2 zmiennych OUT. Gdy próbowałem wydrukować wynik w ciele wyzwalacza, nic na ekranie, ale potem rozwiązałem ten problem tworząc dwie zmienne lokalne w funkcji, obliczyć to, czego potrzebuję z nimi i na koniec skopiować te zmienne w zmienne procedur OUT. Mam nadzieję, że będzie przydatny, sukces!

Powiązane problemy