2012-04-05 520 views
28

我有這樣的過程:調用在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爲甲骨文。程序本身或者我稱之爲的方式有問題嗎?在INVOICE表中有一個INVOICE_NR等於100000的條目。

+2

如果運行「begin dbms_output.put_line('output test')end;」你看到輸出了嗎?這個程序和調用它的方式是完全正確的。 – arturro 2012-04-05 08:15:05

+0

我以這種方式運行它,但我沒有看到輸出。 DreamCoder可能不顯示put_line()的輸出嗎? – RegedUser00x 2012-04-05 08:29:32

+0

不,我用'BEGIN dbms_output.put_line('hi'); END;'它也沒有顯示任何東西。 – RegedUser00x 2012-04-05 08:32:22

回答

1

轉到菜單工具 - > SQL輸出,運行PL/SQL語句, 輸出將顯示在SQL輸出面板上。

34

如果您在整個代碼之前將服務器輸出設置爲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

我有同樣的疑難問題使用的觸發,並且在觸發我叫程序它在2個OUT變量中計算一些值。當我試圖將結果打印在觸發器主體中時,屏幕上沒有任何內容,但後來我解決了這個問題,在函數中創建了2個局部變量,計算了我需要的值,最後將這些變量複製到你的OUT程序變量。 我希望,這將是有用的,成功的!

相關問題