2012-01-27 2 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のCONTENTS:

return code: 0 

私は、ストアドプロシージャ内DMBS出力の束を一覧表示

が、何もスプールファイルに書き込まれます。

どうすればスプールファイルに出力できますか?

私はOUT変数を持っているしようとしたが、手続きはパラメータを使用して、それがエラーアウトそれがDBリンクを通過しているので、COMMITを含んでいるので...

+0

SQL * PLUSで[email protected]の出力が表示され、スプール・ファイルに書き込まれません。または単に出力が表示されないのですか? –

+0

プロシージャに「dbms_output.disable」コールがないことをチェックしましたか? –

+0

@ Shannon Severance:私が得ている唯一のdbms出力は、 "return code:0"というUNIXスクリプトからです。出力はストアドプロシージャから示されたスプールファイルに格納されません。 @ A.B.Cade:プロシージャ内にそのような呼び出しはありません。ストアドプロシージャは、ループが10k行ごとにコミットされる単純なdelete文です。 – user1174390

答えて

0

にPUTのための出力をし、PUT_LINEがバッファリングされます。 Oracle docs から:PL/SQLプログラムが完了するまで

SQL * Plusは、メッセージをDBMS_OUTPUT表示されません。 PL/SQLプログラム内でDBMS_OUTPUTバッファをフラッシュするメカニズムはありません。

したがって、応答をストリーミングする場合は、出力をバッファしない小さなプログラムを作成する必要があります。

関連する問題