2012-01-27 63 views
0

我正在使用UNIX腳本來運行通過數據庫鏈接啓動存儲過程的sql代碼。我可以讓程序成功完成,但是沒有任何DBMS輸出被假脫機到指定的SPOOL文件。內UNIX如何從通過數據庫鏈接執行的存儲過程中進行後臺處理?

SQL:

set feedback off; 
set linesize 500; 
set serveroutput on size 1000000; 
set serveroutput on format wrapped; 
spool $SQLspool; 

whenever oserror exit; 
whenever sqlerror exit sql.sqlcode; 

DECLARE 

retcode integer :=0; 

BEGIN 

[email protected]; 

dbms_output.put_line(''); 
dbms_output.put_line('return code: ' || retcode); 
dbms_output.put_line(''); 


EXCEPTION 
     WHEN OTHERS THEN 
     RAISE; 

END; 
/
EXIT; 

spoolfile信箱內容:

return code: 0 

我列出了存儲過程中一堆DMBS輸出,但沒有數據被寫入到假脫機文件。

我怎樣才能得到它輸出到假脫機文件?

我想有OUT變量,但由於過程中包含的COMMIT它的錯誤了與參數,因爲它會通過數據庫鏈接...

+0

您是否在SQL * PLUS中看到[email protected]的輸出,並且沒有寫入假脫機文件。或者是輸出根本不顯示? – 2012-01-28 06:36:25

+0

您是否檢查過程中沒有「dbms_output.disable」調用? – 2012-01-29 07:05:31

+0

@ Shannon Severance:所以我得到的唯一的dbms輸出是來自「返回代碼:0」的unix腳本。輸出沒有被存儲到存儲過程指示的假脫機文件中。 @ A.B.Cade:程序中沒有這樣的調用。存儲過程是一個簡單的刪除語句,每10k行提交一個循環。 – user1174390 2012-01-30 13:19:32

回答

0

的輸出PUT和PUT_LINE緩衝。從Oracle docs

SQL *,直到PL/SQL程序完成Plus不顯示DBMS_OUTPUT消息。在PL/SQL程序中沒有用於刷新DBMS_OUTPUT緩衝區的機制。

因此,如果您正在尋找流式響應,您將需要編寫一個不會緩衝輸出的小程序。

相關問題