挿入、削除、および更新操作の後にテーブル内のデータを更新する方法を知っている人はいますか? 私は単純なテーブルを持っています:
create table EV_JOURNAL (EVENT_TO_TASK_ID NUMBER(3)
NOT NULL Check(EVENT_TO_TASK_ID>0), EVENT_TIME TIMESTAMP WITH TIME ZONE NOT NULL);
// テーブルが作成されました トリガーに関する情報を見つけて、挿入、削除、および更新後のトリガーを作成しました。
create or replace
TRIGGER AFT_INS_UPD_DEL_TRIG
AFTER Insert or Delete or Update ON EV_JOURNAL
For Each Row
DECLARE
BEGIN
INSERT INTO EV_JOURNAL(EVENT_TO_TASK_ID,EVENT_TIME)
VALUES(:NEW.EVENT_TO_TASK_ID, :NEW.EVENT_TIME);
END AFT_INS_UPD_DEL_TRIG;
しかし、テーブルにデータを挿入しようとすると、次のようになります。
Insert into ev_journal (event_time,event_to_task_id) values(systimestamp,2);
次のエラーがあります: SQL エラー: ORA-04091: テーブル EV_JOURNAL が変化しています。ORA-04088: トリガーの実行中にエラーが発生しました。誰かがこの状況で私を助けてくれますか? テーブルを更新するだけで十分ですが、これを行う方法がわかりません。
指定されたテーブルから更新されたデータを使用する必要がある C# アプリのコード:
public static List<EventTrigger> FillEventTriggerList (List<EventTrigger> list)
{
using (OracleConnection connection = new OracleConnection (connectionString))
{
connection.Open ();
string sqlText = "Select * From EV_JOURNAL";
OracleCommand command = new OracleCommand (sqlText, connection);
OracleDataReader reader = command.ExecuteReader ();
while (reader.Read ())
{
list.Add (new EventTrigger (int.Parse(reader [ "EVENT_TO_TASK_ID" ].ToString()),(DateTime)(reader [ "EVENT_TIME" ])));
}
}
return list;
}
したがって、EV_JOURNAL からいくつかの行を削除するとしましょう。この Select クエリの後、既に削除されているはずの古いデータが取得されますが、データベースでテーブルの更新をクリックした後にのみ削除されます。
ありがとう