0

1 つのプロシージャの実行中に奇妙な問題が発生します。

Proc は次のようになります。

procedure abc 
IS 
CURSOR xyz_cur IS
 SELECT x
       ,y
       ,z 
 from temp 
  where y IN ('abc'.'pqr'.'def','sql','pqw') 
for update nowait;
BEGIN

open xyz_cur ;
:
:

END abc;

以前は、カーソル クエリには 'sql','pqw' がありませんでした。この IN ステートメントをこれら 2 つの varchar 値で拡張しました。また、テーブル temp は列 y にチェック制約を持ち、チェック制約も拡張しました。

どうすれば問題を解決できますか。最近追加した2つの値がなくてもうまく機能します。

私が試したこと、テーブルを分析してインデックスを再構築しましたが、まだうまくいきません。助けてください

4

2 に答える 2

5

ORA-600 は「内部エラー」を示しますが、少なくとも理論上は決して表示されるべきではありません。

最初のインスタンスでは、データベースを再起動することをお勧めします。

その後も問題が解決しない場合は、Oracle サポートに連絡してください。

于 2012-10-02T09:00:13.787 に答える
3

Metalink は SELECT.. FOR UPDATE に関連するいくつかの問題について言及していますが、結果として ORA-00600 [13009] が発生しましたが、問題に正確に適合するものはないようです (10g 以前を使用しておらず、ツリー クエリもありません)。 Oracle サポートに連絡することをお勧めします。

あなたが試すことができる可能な回避策:

  • カーソル定義でUNION ALLを使用します(y値ごとに1つのブランチ)
  • y 値の有限セットがある場合: IN ではなく y を使用してロジックを反転します ...
于 2012-10-02T09:00:34.510 に答える