• 締切済み

ORACLEのUPDATE処理

お世話になります。 UPDATE文のSET句からストアドファンクションを呼び返却値を設定する処理を行っています。 が、以下のエラーが出ます。 「ORA-04091: 表xx.xxxは変更しています。トリガー/関数は見ることができません」 テーブルにトリガーは使用していません。 ストアドファンクション内で、コール側のUPDATEするTABLEを参照(SELECT)しているのですが この箇所を削除すると、エラー発生しません。 以下のような処理です。 UPDATE TABLE_A SET COL_A = FUNC(KEY1,KEY2); FUNC(PKEY1,PKEY2) IS CORSOR C1 IS SELECT COL_B FROM TABLE_A WHERE KEY1 = PKEY1 AND KEY2 = PKEY2; BEGIN ・・・ END; UPDATEですが、自TABLEのSELECTは ・SET句の中でSELECTする場合はうまくいく ・引数渡し→ストアドファンクション内でSELECTはできない という事なのでしょうか。 よろしくお願いします。

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

メッセージの通りです。ストアドファンクションでは更新対象表を参照することはできません。 UPDATE文を工夫して対処してください。 ストアドプロシージャでUPDATEするようにはできます。

appplus2
質問者

お礼

ご回答ありがとうございました。 先ほどストアドファンクション内で更新対象表を参照することができましたので 問題解決しました。

関連するQ&A