人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PL/SQLの「SET SERVEROUTPUT ON SIZE」と改行コードの関係について教えてください。
1)1行に1文字の文字列を表示し改行し、それを1000回繰り返す場合、サイズが4001必要でした。
2)1行に4文字の文字列を表示し改行し、それを 500回繰り返す場合、サイズが2001必要でした。
文字の出力方式は「DBMS_OUTPUT.PUT_LINE」です。
上記1)はファイルサイズが2000(Byte)になります。2)のファイルは2500(Byte)になります。
(「PL/SQLプロシージャが正常に完了しました。」という文字列を出力しない場合)
何を目安に「SET SERVEROUTPUT ON SIZE」を決めればよいのでしょうか。

●質問者: smileless
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:byte ON PL/SQL SET コード
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● warx
●25ポイント

http://www.oracle.co.jp/

Oracle Japan

Oracle社が配布しているPL/SQLパッケージ・プロシージャリファレンスのDBMS_OUTPUTパッケージ、サブプログラムの要約に含まれる「PUTおよびPUT_LINEプロシージャ」には次のように書かれています。

*PUTまたはPUT_LINEで作成した出力はバッファに入れられます。この出力は、それをバッファに入れたPL/SQLプログラム・ユニットがコール側に戻るまで取り出せません。

たとえば、Enterprise ManagerまたはSQL*Plusは、PL/SQLプログラムが完了するまでDBMS_OUTPUTメッセージを表示しません。

PL/SQL プログラム内でDBMS_OUTPUTバッファをフラッシュするメカニズムはありません。

SET SERVEROUTPUT ON SIZE xxxxxで指定したバッファサイズ(byte)や一行の長さの限界である255byteを超えない範囲でPUTやPUT_LINEを使う、という回答以外に何か書くとしたら、DBMS_OUTPUTはデバグ用に少量のちょっとした変数の内容を出力するのに用いるべきで、バッファ内容を考慮しながら使う、例えばログ出力などには別の手段を考えた方がいいということでしょうか。

◎質問者からの返答

ありがとうございます。

>超えない範囲でPUTやPUT_LINEを使う

もちろん、そのようにするのが正しい使い方だと思います。

しかし、なるべく最低限のサイズで設定したいと考えています。

(全てのプログラムで1000000以下には収まるようにしていますが、すべて1000000と設定するのにはちょっと抵抗があります。)

DB内容を加工してテキストファイルにCSV形式で保存したいのですが、Pro*Cに乗り換えずに何とかする方法を考えています。

引き続き、回答をお待ちしています。


2 ● warx
●25ポイント

http://www7.big.or.jp/~pinball/discus/oracle/61864.html

それなら組み込みパッケージUTL_FILEを利用してみてはいかがですか?

URLはUNIX-OSでのサンプルですが、アペンド時に問題が起こることに対処したものだそうです。

http://www.ee-max.co.jp/oradou/ora_back1/ora_back1007.htm

404 Not Found

こちらはWindows版のパス記述をしています。これも参考になるでしょう。

これを使うことでプロシジャ内でバッファを切りなおすオーバヘッドも減るでしょうね。

DBMS_OUTPUTパッケージからUTL_FILEへの書き換えやテストに時間は食われると思いますが。:-)

◎質問者からの返答

ありがとうございます。

ためしてみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ