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

アフタートリガーで同じテーブルを使用するプロシージャを呼び出す方法

    できません。

    通常の行レベルのトリガーは、トリガーが定義されているテーブルを照会できません。これは、変更テーブルの例外が発生するためです。これが、自律型トランザクションを使用するトリガーを宣言した理由だと思います(永続ログ以外の自律型トランザクションは、ほぼ確実にエラーです)。ただし、これを行うと、トリガーは、トリガートランザクションによって行われたコミットされていない変更を確認できません。それがあなたが今直面している問題です。

    別の方法は、複合トリガー を使用することです。 。 test_table.type_%typeのコレクションを宣言します 、トリガーの行レベルの部分でこのコレクションに変更される値を追加してから、トリガーのステートメント後の部分でコレクション内の要素を反復処理します。ステートメントレベルのトリガーは、トリガーが定義されているテーブルにクエリを実行できるため、複合トリガーのステートメント後の部分からプロシージャを呼び出すことができます。



    1. MySQLの`REPLACE`と`INSERT... ON DUPLICATE KEY UPDATE`の実際的な違いは何ですか?

    2. SQLの並べ替えは、group byステートメントに従わず、常に主キーを使用します

    3. OracleSQLの営業時間に基づいて時間を計算する

    4. 1つの長いテーブル列を複数の列を持つテーブルに変換します