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

同じテーブルによって起動された後、トリガーはテーブルを読み取ることができません

    挿入したばかりのONOをログに記録しようとしている場合は、:new.onoを使用してください。 選択を完全にスキップします:

    INSERT INTO BACKUP_ONO VALUES( VALUE1, VALUE2,VALUE3, :new.ono);
    

    コミットがまだ発行されていないため、挿入中のテーブルから選択できるとは思わないため、テーブルの変更エラーが発生します。

    追伸省略しないことを検討してください。次の開発者のために明確にし、会社の命名基準が何であれ、それをORDER_NUMBERまたは少なくともORDER_NBRのような一般的に受け入れられている略語と呼びます。 :-)

    参考までに-更新する場合は、更新前の値である:OLD.columnにもアクセスできます(もちろん、列が主キー列でない場合)。



    1. トラフィックが多いときにパラメータ化されたクエリ(バインディング)のClientReadでアイドル状態の接続をブロックする

    2. PL/pgsqlでEXECUTEを使用して汎用トリガーからNEW。*を挿入する

    3. MySQLギャップロック

    4. PostgreSQLのunpivot()と同等