0

UNIX スクリプトを使用して、データベース リンク経由でストアド プロシージャを開始する SQL コードを実行しています。手順を正常に完了することができますが、示された SPOOL ファイルに DBMS 出力がスプールされません。

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

owner.procedure@db;

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


EXCEPTION
        WHEN OTHERS THEN
        RAISE;  

END;
/
EXIT;

スプールファイルの内容:

return code: 0

ストアド プロシージャ内に多数の DMBS 出力をリストしますが、スプール ファイルには何も書き込まれません。

スプールファイルに出力するにはどうすればよいですか?

IN OUT 変数を使用しようとしましたが、プロシージャに COMMIT が含まれているため、DB リンクを経由しているため、パラメータでエラーが発生します...

4

1 に答える 1

0

PUT および PUT_LINE の出力はバッファリングされます。オラクルのドキュメントから :

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

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

于 2012-01-30T15:53:27.880 に答える