- - PR -
ORA-604 再帰SQLレベル%sでエラーが・・・ について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-02-02 21:07
2回目の投稿です。
【ORA-604 再帰SQLレベル%sでエラーが発生しました。】のメッセージがでてしまいます。 但し、この現象は同じロジックでも処理回数が少ない場合はうまくいきます。 下に簡単にロジックを記述します。 =@====================================== Do Until i > flxKensaku.Rows.Count - 1 '←グリッドのデータをまわす '--- 検索情報有無チェック If FNCAAA = False Then Exit Function End If '--- データセットへ格納処理 --- ・ ・ ・ '--- グリッド行をカウントアップ i = i + 1 Loop =A====================================== Private Function FNCAAA Try '--- SQL作成 '---Oracleに接続(HJUSER48/HJUSER48) gdbHj.subOpenDatabase(gstrOraUserName, gstrOraPassWord, gstrOraDbName) '---ダイナセットオープン intState1 = gdbHj.fncSelect(strSQL) '---レコード無の場合はエラーリターン lbolRead = gdbHj.fncFetch(intState1) If lbolRead = False Then Exit Function End If Do While lbolRead = True '--- データセットへ格納処理 --- ・ ・ ・ lbolRead = gdbHj.fncFetch(intState1) Loop Catch Finally If intState1 <> -1 Then gdbHj.subFreeSelect(intState1) End If '---Oracleを切断 gdbHj.subCloseDatabase() End Try End Function ======================================= 【補足】 ・@で取得したデータの子テーブルをAの関数で取得し、データセットに格納する処理です。 ・エラーになってしまうとき、@のDo〜Loopでまわす回数が多い場合に発生します。 (50件以上の場合ほぼ100%エラー) ・Aのオラクル接続でエラーにおちます。 しかし、必ずFinallyでオラクルを切断しているのでセッションは切れているかと思われます。 ・オラクル接続/切断は他の処理で正しく動いているため問題ないかと思われます。 このロジックにどこかおかしい点はありますでしょうか? この事象が発生したことがある方がいらっしゃいましたら、 是非教えて下さい。 よろしくおねがいします。 [ メッセージ編集済み 編集者: TAKAMIKI 編集日時 2005-02-02 21:09 ] |
|
投稿日時: 2005-02-02 21:29
ORA-604はシステムリソースの不足やデータの破損など、他の様々なシステムトラブルが引き金になって発生することが多いそうです。実際、どんな処理をどのくらい繰り返しているのか判りませんが、コード上の問題ではなくサーバーに問題がある可能性を疑ったほうが良いでしょう。Serverのエラーログを確認して、その前後に他のエラーが発生していないか確認してください。
|
|
投稿日時: 2005-02-02 22:15
環境は?Oracleのバージョン、ホストしているOSは?
なぜにダイナセット?OleDBやODP.NET、OracleClientを使わないのはなぜでしょう? oo4oならOTNJの方が回答を得やすいと思います。 _________________ |
|
投稿日時: 2005-02-02 23:15
私の経験と同様かはわかりませんが・・。
”SQL作成”の部分はどのようにされてますか? ベタ文字列のSQLを作成しているとしたら サーバのリソース不足の可能性があると思います。 .NETではありませんが、Oracle8iで同じような経験をして 一度調べたことがあります。 可能な限りSQLのパラメータ化orストアドプロシージャなどを使用しないと、 ベタ文字列のSQLを走らせた場合は、 一文字でも違うSQLが走るたびにサーバリソースを圧迫するようです。 リソースの開放のタイミングが良く分からなかったのですが、 短時間で頻繁にベタ文字列SQLを実行する場合は起こる頻度が多かったのを 記憶しています。(※ユーザー業務が忙しい日中に頻発しました。) この場合は、現象はサーバ側の問題で発生していますが、 原因元はコードの方となります。 |
1