sql >> データベース >  >> RDS >> Oracle

トリガー内のプラグマautonomous_transaction

    親トランザクションがロールバックしたときに保持したいロギング以外の目的で自律トランザクションを使用することは、ほぼ確実にエラーです。これは自律トランザクションの適切な使用法ではありません。

    たとえば、t1の行を更新するとどうなりますか しかし、私のトランザクションはロールバックします。 t2 変更はすでに行われ、コミットされているため、ロールバックされません。これは通常、t2 データが正しくなくなりました。トランザクションの全体的なポイントは、一連の変更がアトミックであり、完全に成功するか、完全に元に戻されるようにすることです。コードを部分的に成功させることは、ほとんどの場合良い考えではありません。

    自律トランザクションを使用することで何がここであなたを買うのかを知るのは難しいです。トリガーエラーの変更を誤って回避するために自律トランザクションを誤って使用している人をよく目にします。ただし、投稿したコードでは、t2に行レベルのトリガーがない限り、変更トリガーエラーは生成されません。 t1も更新しようとしていました または、変更テーブルを導入していた同様のメカニズム。ただし、その場合、自律型トランザクションの使用は一般的にさらに悪化します。これは、自律型トランザクションが親トランザクションで行われている変更を確認できないため、コードが希望とは異なる動作をすることはほぼ確実です。




    1. Oracle SQLは、VARCHARインクリメントPKを自動的に作成します

    2. エラー:テーブルユーザーの更新または削除は、テーブルコメントの外部キー制約fk_rails_03de2dc08cに違反しています

    3. すべてのテーブルのMySQL変更照合

    4. MySqlCommand呼び出し関数