【问题标题】:After Delete or Update or Insert Refresh Table删除或更新或插入刷新表后
【发布时间】:2013-09-22 23:00:10
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: oracle plsql triggers


    【解决方案1】:

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

    也许您可以解释一下“刷新”表格是什么意思。

    编辑:您不是在数据库中单击刷新,而是在访问数据库的某个工具中单击刷新。数据已更改,但您使用的任何工具都必须通过此点击被告知去阅读新版本。

    【讨论】:

    • 通过刷新表我的意思是只需执行与单击数据库中的刷新相同的操作。我需要从我的 c# 应用程序中的表中获取数据。但是,当我通过在我的 Select 查询中插入、更新、删除某些内容来影响表时,我会从表中得到旧的结果。我现在将代码添加到我的问题中。
    • 也许您还没有提交更改。但这里更深层次的问题是,您不了解当您对数据库表执行插入、更新或删除操作时,数据发生了变化。除了发出提交(如果未自动完成)以允许其他会话看到该更改之外,您无需执行任何其他操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    相关资源
    最近更新 更多