如果相同的值更新为一行列,则更新触发器将触发

时间:2016-07-28 11:05:24

标签: oracle plsql

我在更新触发器之前使用表的每一行,比如emp_table在加载到表之前更新一列modifid_date。如果我要使用相同/现有的行更新表,那么这个触发器是否会触发?

触发条件: :new.modifid_dt:= sysdate;

更新前的表值:john(name),4867(id),20-04-2016(modifid_dt) 表值现在将更新:john(name),4867(id)

3 个答案:

答案 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)

新值或现有值 - 无论如何,无论如何,您都会执行更新,因此触发器会触发。