QA@IT

Oracle PL/SQL 途中で終了してしまう。。

10279 PV

お世話になります。

Oracle PL/SQLで質問があります。(SQLDEVELOPER)

あるテーブル(Xてーぶる)からレコードを取得し、取得したレコード情報を
各テーブル、A,B,C,D,E,Fの6つのテーブルにInsertする処理を行っています。

処理としては、

1.Xテーブルからデータを取得(1500レコード)
2.カーソルでループ開始
3,AからFまで順番にインサートする
4.カーソル閉じる
5.終了

といった感じですが、デバックで処理を追いかけてみると処理が途中で終わってしまいます。。
ログも(DBMS_OUTPUT.PUT_LINE('OUTPRM1 = '|| XXXXX);)といった形でだしています。。

ログ出力を大量に行っていたりするがだめなのでしょうか?
もしくはカーソルループに制限があったりするのでしょうか?

ためしに、下記のようにループだけやってみたところ(10000回)
$Oracle.EXCEPTION_ORA_20000: が出ます。。
BEGIN
--SELECT * INTO AB FROM ALERT_QT WHERE MSGID = 'x';
FOR i IN 1..10000 LOOP
DBMS_OUTPUT.PUT_LINE('OUTPRM1 = '||i);
END LOOP;
return 0;
END test;

PL/SQLの設定等で何か制限があったりするのでしょうか?
ご教授御願いいたします。

回答

Oracleのバージョンはなんですか?

細かい数字は忘れましたけど DBMS_OUTPUTのバッファサイズには制限があります。
(10gR2からは無制限にできる?)
dbms_output.enableで設定変更できます。

以下は10gR2のものですがご自分のバージョンのドキュメントを参照してください。
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19245-02/d_output.htm

あと、DBMS_OUTPUT.PUT_LINEは都度出力ではなくて最後に一気に出力されます、細かい情報出してもあまり役に立たないかも。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。