ORACLEトリガにて、トリガの発生元レコードと
同じテーブル上の別のレコードを削除したいです。
しかし、ORACLEの制約によって、
トリガが発生したテーブルの操作はできないため実現できずに困っています。
なにかしらの方法で、上記を実現する方法はあるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
しかし、ORACLEの制約によって、
トリガが発生したテーブルの操作はできないため実現できずに困っています。
質問にその時の現象を再現できるだけの情報やエラーメッセージを載せると解決が早いのですが。
テーブルにぶら下がっているトリガーはそのテーブルに対して、直接的にも間接的にもINSERT, UPDATE, DELETE はできません。
投稿2018/06/13 17:21
総合スコア16415
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
恐らくトリガーの再起呼出しによる連鎖を防止するとかの目的でそのような制約があるんでしょうね・・・。
それはともかく、
すでに他の回答者さんより提案されてますが、
ストアドプロシージャとかストアドファンクションで実装するのが無難かと思います。
ある程度複雑な処理も、
ストアド化してカプセル化できるメリットもありますし。
それにトリガーを多用し過ぎると、
構成によってはトリガーの連鎖が発生し、どの時点で整合性が取れなくなったかのデバッグ・調査が困難となるので、
個人的にはあまりトリガーを多用することはお勧めできないです。
投稿2016/08/22 16:24
編集2016/08/22 16:26総合スコア1636
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/23 00:41
2016/08/23 03:27 編集
0
思いつきですが、ストアドプロシージャ(PL/SQL)にて元レコード削除+トリガー機能と同等の機能を実装し、レコード削除の代わりにそのストアドプロシージャを利用する方法はいかがでしょうか。
トリガーの条件等が分からないのですが、ストアドプロシージャを1トランザクションで実行することで、整合性も保てる(ロールバック、コミットもできる)かと思います。
投稿2016/08/22 11:16
総合スコア2335
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/23 00:40
2016/08/24 04:40
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。