Oracle9の質問です。

ストアドプロシージャで中で使用している文字型変数の値を確認する方法はありませんか?
ただし、この変数には長い文字列が格納されます。
そのため
DBMS_OUTPUT.PUT_LINE
はサイズオーバーで使用できませんでした。

これ以外に変数の値を知る方法はあるのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2007/08/09 20:33:08
  • 終了:2007/08/10 22:04:06

ベストアンサー

id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/08/09 21:48:57

ポイント45pt

ログ出力用のテーブルを作ってそこに 出力させています。

出力する文字列が 長いならば、いくつかに 分けて 出力すればいいでしょう。

id:okazbb

ありがとうございます。

なるほど、ログ用テーブルを用意ですね。

共通関数にしてしまえば使いまわしも効きそうですね。

検討してみます。

2007/08/10 09:27:44

その他の回答(3件)

id:F-15X No.1

F-15X回答回数111ベストアンサー獲得回数132007/08/09 21:03:15

ポイント15pt

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl16.htm

dbms_output.enable(size);

でバッファサイズを指定したらいかがでしょうか?

バッファサイズ

省略値は 20000

最小値は 2000

最大値は 1000000

(in integer)

id:okazbb

ありがとうございます。

dbms_output.enable(1000000)

と指定してみましたが

ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line

のエラーが発生してしまいました。

2007/08/10 09:24:24
id:KUROX No.2

KUROX回答回数3542ベストアンサー獲得回数1402007/08/09 21:04:43

ポイント15pt

dbms_output.enable(3000);

で出力するサイズを変えれた記憶があるのですが・・。

省略値は 20000

最小値は 2000

最大値は 1000000

だと思います。

id:okazbb

ありがとうございます。

上の方の返信に書いたように、最大値を指定してみましたがやはりエラーとなりました。

ちなみに、PUT_LINEに渡す文字列をlengthbで調べてみると長さは446byteでした

2007/08/10 09:26:23
id:taknt No.3

きゃづみぃ回答回数13539ベストアンサー獲得回数11982007/08/09 21:48:57ここでベストアンサー

ポイント45pt

ログ出力用のテーブルを作ってそこに 出力させています。

出力する文字列が 長いならば、いくつかに 分けて 出力すればいいでしょう。

id:okazbb

ありがとうございます。

なるほど、ログ用テーブルを用意ですね。

共通関数にしてしまえば使いまわしも効きそうですね。

検討してみます。

2007/08/10 09:27:44
id:samejima No.4

samejima回答回数92ベストアンサー獲得回数82007/08/10 10:39:29

ポイント15pt

sqlplusは標準入出力が弱いのが欠点ですね。

UTL_FILEを使い、テキストファイルに書き出すのが良いです。

id:okazbb

ありがとうございます。

なるほど、ファイルに書き出す事もできるのですね。

今回はサーバーのファイルを触ることができない環境なのが残念です。

でも、参考になりました。

2007/08/10 22:02:40
  • id:F-15X
    的外れでごめんなさい。

    OTN掲示板より
    http://otn.oracle.co.jp/forum/index.jspa?categoryID=2


    ORU-10028: line length overflowについて
    ------------------------------------------------------------
     DBMS_OUTPUTでは、1行の長さが255バイトに制限されているため、
    それ以上になる場合、出力を分ける必要があります。
    仮に、"変数1"が500バイトである場合には、
    DBMS_OUTPUT.PUT_LINE(変数1);
    とすると、エラーとなってしまうので、SUBSTRを使用して
    DBMS_OUTPUT.PUT_LINE(SUBSTR(変数1,1,250));
    DBMS_OUTPUT.PUT_LINE(SUBSTR(変数1,251,250));
    というように2つに分けて出力することになります。
    ------------------------------------------------------------
    あとは、スプールでしたっけ?テキストファイルに落とすとか。
  • id:taknt
    ログテーブルで 項目をVARCHAR2に指定すれば 4000バイトまで設定できます。

    http://www.mitene.or.jp/~rnk/TIPS_ORCL_TBLCREATE.htm
  • id:F-15X
    SI Object Browser
    http://www.sint.co.jp/siob/default.asp
    http://www.sint.co.jp/siob/download.asp (トライアル版)
    ストアドプログラムのデバッグ(ステップ実行など)ができますよ。
  • id:taknt
    Object Browserでのストアドのデバッグって いまいち・・・。


  • id:F-15X
    確かにもっと良いものが欲しい。
    でも無いよりははるかにマシですぞ。>taknt氏
  • id:taknt
    なので、私は、Object Browser自体は使っていても
    ストアドのデバッグには 使ってないですねぇ。

    せいぜいソースの修正、コンパイル確認に使ってます。

    デバッグは、ログに出力させてやっています。
    これで 十分です。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません