在oracle中触发。插入或更新其他字段

时间:2015-09-02 07:19:12

标签: oracle triggers

当我有一个DATAMARKERLOG_ALARMA" INSTER时,我需要更新我的表UPDATE的字段CONTADOR" }"

我有这个,但返回静音错误。

create or replace TRIGGER TRIGGER2 
AFTER INSERT OR UPDATE OF CONTADOR ON LOG_ALARMA
for each row
BEGIN
  UPDATE LOG_ALARMA a 
  SET a.DATAMARKER=(SYSDATE);
END;

我看了另一个例子,他们工作但我无法正确执行。

如果我在触发器主体中对每一行进行注释,那么它工作正常,但UPDATES表中的所有行。

2 个答案:

答案 0 :(得分:0)

您不会发出更新SQL语句,因为这会再次导致触发器触发。

相反,您只需将值:new.DATAMARKER设置为sysdate,使用PL / SQL而不是SQL。

也可以在插入或更新之前进行。

答案 1 :(得分:0)

CREATE TABLE Mutating
(
  ID1    NUMBER,
  DATE1  DATE
)

表中的数据是

ID1 DATE1
1   09/01/2015 14:09:14
1   08/31/2015 14:09:21
2   08/30/2015 14:09:30

现在我想更新date1,如果在id1列上发生了任何更新,那么我在下面使用了触发器。

    CREATE OR REPLACE TRIGGER Mutating_trg
        before INSERT OR DELETE OR UPDATE ON Mutating
     referencing old as old new as new 
        for  each row 

        begin

            if updating  then
             :new.date1:=sysdate;
            end if;

    end;

然后我发布了更新声明

    update set Mutating id1=6 where trunc(date1)=trunc(sysdate-2)
    1 row updated

现在查看结果

ID1 DATE1
1   09/01/2015 14:09:14
6   09/02/2015 14:09:14
2   08/30/2015 14:09:30

你应该使用before语句。

相关问题