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

挿入トリガー後の変更エラー

    Oracleには、行レベルとテーブルレベルの2つのレベルのトリガーがあります。

    行レベルのトリガーは、for each row実行されます。 。ステートメントが複数の行を変更した場合でも、ステートメントごとに実行されるテーブルレベルのトリガー。
    行レベルのトリガーでは、トリガーを持つテーブル自体を選択/更新することはできません。変更エラーが発生します。

    >

    この場合、UPDATEステートメントは必要ありません。これを試してみてください:

    CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
    BEFORE INSERT
    ON aso.aso_quote_headers_all
    FOR EACH ROW
    BEGIN
     :new.quote_expiration_date=sysdate+90;     
    END;
    /
    

    編集 Rajeshは、新しい行を挿入する前に、OPがaso_quote_headers_all内の他のすべてのレコードを更新する可能性があると述べました。 テーブル。

    まあ、これは実行可能ですが、少し注意が必要です。これを適切に行うには、

    が必要です。
    1. トリガーによって変更されるpl/sqlパッケージおよびパッケージヘッダー内の変数。この変数は、新しく挿入されたレコードのIDを保持するリストである可能性があります。挿入トリガー後の行レベルは、リストに新しいIDを追加します。このパッケージ変数の内容はセッションごとに異なるため、この変数をsession_variableと呼びましょう。 。
    2. 挿入トリガー後の行レベル。これにより、session_variableに新しいIDが追加されます。 。
    3. session_variableからIDを取得する挿入トリガー後のテーブルレベル 、IDを処理してから、session_variableから削除します。 。このトリガーは、aso_quote_headers_allで必要な選択/更新を実行できます。新しく挿入されたIDが処理された後、このトリガーはIDがsession_variableから削除されていることを確認する必要があります 。


    1. mysqlデータベースから同様の値を選択します

    2. Yii2ファイルをOracleBLOBに保存

    3. プリペアドステートメントの構文エラーが発生するのはなぜですか?

    4. nullも許可する一意の制約を作成するにはどうすればよいですか?