web-dev-qa-db-ja.com

dbms_outputバッファーを増やす方法は?

dbms_outputを使用して動的クエリをデバッグしようとしましたが、クエリ文字列がdbms_outputバッファーに対して長すぎるようです。

私は得た:

ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "SYS.DBMS_OUTPUT", line 148
ORA-06512: at line 1 

バッファサイズを増やす方法はありますか?

17
hsuk

DBMS_OUTPUTを有効にして、バッファサイズを設定できます。バッファサイズは1〜1,000,000です。

dbms_output.enable(buffer_size IN INTEGER DEFAULT 20000);
exec dbms_output.enable(1000000);

チェックthis

[〜#〜] edit [〜#〜]

フランクとマットが投稿したコメントによると、Nullで有効にすることもできます

exec dbms_output.enable(NULL);

buffer_size:バッファリングされた情報の量の上限(バイト単位)。 buffer_sizeをNULLに設定すると、制限がなくなります。ユーザーがbuffer_size(NOT NULL)を指定した場合、最大サイズは1,000,000、最小サイズは2,000です。

31
Gopesh Sharma

バッファサイズがいっぱいになると。あなたが試すことができるいくつかのオプションがあります:

1)DBMS_OUTPUTバッファーのサイズを1,000,000に増やす

2)バッファに書き込まれたデータをフィルタリングしてみます-DBMS_OUTPUTに書き込むループがある可能性があり、このデータは必要ありません。

3)コード内のさまざまなチェックポイントでENABLEを呼び出します。呼び出しごとにバッファがクリアされます。

DBMS_OUTPUT.ENABLE(NULL)は、後方互換性のためにデフォルトで20000になります dbms_outputのOracleドキュメント

以下のスニペットのようなカスタム出力display.somethingを作成することもできます

create or replace procedure cust_output(input_string in varchar2 )
is 

   out_string_in long default in_string; 
   string_lenth number; 
   loop_count number default 0; 

begin 

   str_len := length(out_string_in);

   while loop_count < str_len
   loop 
      dbms_output.put_line( substr( out_string_in, loop_count +1, 255 ) ); 
      loop_count := loop_count +255; 
   end loop; 
end;

リンク-Ref: dbms_output.putlineの代替 @ By:Alexander

3
popats.

どうぞ:

DECLARE
BEGIN
  dbms_output.enable(NULL); -- Disables the limit of DBMS
  -- Your print here !
END;