2013-05-10 16 views
14

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 

任意のアイデアをどのようにバッファサイズを増やすには?

+5

dbms_outputを使用すると、多すぎる情報を書き込んでいる可能性があります。それはそのために設計されていません。あなたの最善の選択肢はおそらくそれらのメッセージをテーブルに挿入し、その後テーブルから選択することです。 –

+0

@a_horse_with_no_name:ログに記録されないインシデントの可能性があるため、データベーステーブルをアプリケーションログとして使用することは決してありませんでした。あなたが接続できないデータベースにログがある場合、アプリケーションが接続できないという事実をどこに記録するのですか?私はフラットファイル(PL/SQLのUTL_FILEパッケージを使用)にログを書き込む方が好きですが、IMOはデータベースのテーブルよりも使用できなくなります。 YMMV。共有して楽しんでください。 –

+0

@BobJarvis:PL/SQLプロシージャの内部では、これは完全に意味があると思います。通常のアプリケーションコード(Java、C#、...)では、私はあなたに同意します。 –

答えて

25

DBMS_OUTPUTを有効にして、バッファサイズを設定できます。バッファサイズは、1〜1,000,000の間で設定できます。フランクとマットにより投稿コメントを1として

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

チェックthis

EDIT

、あなたはまた、ヌル

exec dbms_output.enable(NULL); 

BUFFER_SIZEでそれを有効にすることができます。上限、in tes、バッファされた情報の量buffer_sizeをNULLに設定すると、制限がないことを指定します。ユーザーがbuffer_size(NOT NULL)を指定すると、最大サイズは1,000,000、最小値は2,000になります。

+0

同じエラーが発生しています。それはうまくいかなかった。とにかく感謝 – hsuk

+0

dbms_outputを無効にしてから最大サイズで有効にしてみてください –

+5

また、dbms_output.enable(NULL)も呼び出すことができます。これにより、バッファ・サイズが無制限に設定されます.http://docs.oracle.com/cd/B19306_01 /appdev.102/b14258/d_output.htm#i999293 –

3

バッファサイズがいっぱいになると、バッファに書き込まれたデータをフィルタリングしてください)

1)1,000,000

2にDBMS_OUTPUTバッファのサイズを増やす - おそらくDBMS_OUTPUTに書き込み、あなたがループがあります:あなたが試すことができますいくつかのオプションがあります。このデータは必要ありません。

3)コード内のさまざまなチェックポイントでENABLEを呼び出します。各コールはバッファをクリアします。 Alternative to dbms_output.putline ことで@:

DBMS_OUTPUT.ENABLE(NULL)は、あなたはまた、スニペット

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以下のようにdisplay.somethingカスタム出力を作成することができ、後方互換性Oracle documentation on dbms_output

のために20000にデフォルト設定されます:Alexander

+3

DBMS_OUTPUT.ENABLE(NULL)は、パラメータを省略した場合と同じではありません。オラクル社のドキュメント(リンクを参照)には、「buffer_size バッファの情報量の上限(バイト単位)。buffer_sizeをNULLに設定すると、制限がないことを指定しています。 –

+0

私はあなたがこれでプロシージャを変更する必要があると思います: 'プロシージャの作成または置換FRE_OUTPUT_REPLACE(varchar2のinput_string) は ですout_string_in長いデフォルトinput_string; string_lenth number; loop_count数値のデフォルトは0です。 begin string_lenth:= length(out_string_in); whileループカウント uzay95

0

ここに行きます:

DECLARE 
BEGIN 
    dbms_output.enable(NULL); -- Disables the limit of DBMS 
    -- Your print here ! 
END; 
関連する問題