删除或更新或插入刷新表后

时间:2013-09-18 09:00:18

标签: oracle plsql triggers

有人知道在插入,删除和更新操作后如何刷新表中的数据?我有一张简单的表格:

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#app中的代码,我需要使用来自给定表的刷新数据:

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查询之后,我得到的旧数据必须已经删除,但只有在我点击数据库中的刷新表后才会这样。

由于

1 个答案:

答案 0 :(得分:2)

这没有意义 - 您正在检测对表的更改并尝试通过将相同的行插入同一个表来进行响应。

也许你可以通过“刷新”表来解释你的意思。

编辑:您没有单击数据库中的刷新,而是在某个访问数据库的工具中单击刷新。已经进行了数据更改,但是无论您使用什么工具,都必须通过此单击来告知读取新版本。

相关问题