我在更新触发器之前使用表的每一行,比如emp_table在加载到表之前更新一列modifid_date。如果我要使用相同/现有的行更新表,那么这个触发器是否会触发?
触发条件: :new.modifid_dt:= sysdate;
更新前的表值:john(name),4867(id),20-04-2016(modifid_dt) 表值现在将更新:john(name),4867(id)
答案 0 :(得分:1)
无论您使用的是什么值,您的触发器都会被触发;例如:
SQL> create table testTrigger ( a number)
2 /
Table created.
SQL> CREATE OR REPLACE TRIGGER before_update_trigger
2 before update on testTrigger
3 for each row
4 begin
5 dbms_output.put_line('Trigger fired!');
6 end;
7 /
Trigger created.
SQL> insert into testTrigger values (10);
1 row created.
SQL>
SQL>
SQL> update testTrigger set a = 10;
Trigger fired!
1 row updated.
SQL> update testTrigger set a = 11;
Trigger fired!
1 row updated.
SQL>
答案 1 :(得分:1)
如果你想避免"假"解雇你应该写这样的触发器:
create or replace trigger trigger1
before update on tst
for each row
begin
IF :new.t_key != :old.t_key AND ... THEN
dbms_output.put_line('Trigger fired!');
END IF;
end;
但当然要注意NULL
值。
答案 2 :(得分:0)
新值或现有值 - 无论如何,无论如何,您都会执行更新,因此触发器会触发。