Triggers 更新多个列时如何触发

Triggers 更新多个列时如何触发,triggers,oracle10g,Triggers,Oracle10g,在这里,我想在更新任何一列时触发更新查询。但我发现错误表正在变化,触发器/函数可能看不到它 create or replace TRIGGER TRIGGER1 AFTER UPDATE OF HOST_ID,ENABLED_FLAG,ACTIVE_FLAG,AGENT_COUNTER,USER_WAIT_FLAG ON MONITOR_AGENT_STATUS FOR EACH ROW BEGIN update monitor_agent_status set

在这里,我想在更新任何一列时触发更新查询。但我发现错误表正在变化,触发器/函数可能看不到它

create or replace
  TRIGGER TRIGGER1 
    AFTER  UPDATE OF HOST_ID,ENABLED_FLAG,ACTIVE_FLAG,AGENT_COUNTER,USER_WAIT_FLAG ON  MONITOR_AGENT_STATUS 
  FOR EACH ROW
    BEGIN
update monitor_agent_status set active_flag='Y', enabled_flag='Y', agent_counter=0, user_flag='N';
 END;

您应该在BEFORE行触发器中设置如下值:

create or replace
  TRIGGER TRIGGER1 
    BEFORE UPDATE OF HOST_ID,ENABLED_FLAG,ACTIVE_FLAG,AGENT_COUNTER,USER_WAIT_FLAG ON  MONITOR_AGENT_STATUS 
  FOR EACH ROW
    BEGIN
      :NEW.active_flag:='Y';
      :NEW.enabled_flag:='Y';
      :NEW.agent_counter:=0;
      :NEW.user_flag:='N';
 END;
您的第二个触发器来自以下评论:

CREATE OR REPLACE TRIGGER TRIGGER11 
BEFORE UPDATE OF HOST_ID ON HOST_CURR_TIME 
FOR EACH ROW 
DECLARE 
   NewHost_Time varchar(10); 
BEGIN 
   select HOST_ID 
   into   NewHost_Time 
   from   HOST_CURR_TIME 
   where  HOST_ID='ATLMB100'; 

   :new.HOST_ID:= case :new.HOST_ID 
                     when 'CCNAFE02' then NewHost_Time 
                     when 'OFCBSERV' then NewHost_Time 
                     else :new.HOST_ID 
                  end; 
END; 

为什么我们要在触发前采取行动?为什么不在之后?您无法修改after触发器中的值,因为更新已经完成。在更新每行的HOST\u CURR\u TIME上的HOST\u ID之前,创建或替换触发器11声明NewHost\u TIME varchar10;开始从主机当前时间选择主机ID进入新主机时间,其中主机ID='ATLMB100';当'CCNAFE02'时的案例主机ID:新建。主机ID:=新建主机时间当'ofccbserv'时的案例主机ID:新建。主机ID:=新建主机时间其他主机ID结束;终止我在这里触发了另一个触发器,我正在从一列获取数据,需要更新到其他两列。你能检查一下它是正确的还是错误的吗?我们能不能设定一个时间,也就是1分钟后它应该触发。我已经修改了这个触发器,并添加到我的答案中。您的案例陈述存在问题,我已将其转换为案例表达。