0

如果更新语句中未指定列,是否控制触发器仅设置值?例如,如果我在表/列上执行以下更新语句 -

update sampleTable set firstname='test', lastname='me' where id='id1';

在上述情况下,由于 firstname 和 lastname 列都已更新,因此我不希望在更新触发器之前执行任何操作。但是,如果执行以下语句 -

update sampleTable set firstname='test' where id='id1';

在上述情况下,由于 lastname 列未更新,我希望触发器将 lastname 设置为 null。

我试过以下 -

Create or Replace Trigger testTrigger before update of firstname on sampleTable for each row
begin
   if :old.firstname != :new.firstname and :old.lastname = :new.lastname then
      :new.lastname = null;
   end if;
end;

这背后的想法是,如果我执行上面的第一个更新语句,并且新的姓氏与以前的姓氏值不同,那么 :old 和 :new 的值将不同,因此 if 条件将不满足并且姓氏不会设置为空。当然我错了,在两个更新语句中,它仍然最终将 lastname 更新为 null。

我在这里有什么选择?我正在使用 Oracle 11g。

4

1 回答 1

0

如果您希望在lastname更新语句不引用此列的情况下设置为 null,则可以使用该UPDATING()函数。

Create or Replace Trigger testTrigger 
before update of firstname on sampleTable 
for each row
begin
   if not updating('LASTNAME') then
      :new.lastname := null;
   end if;
end;
/
于 2013-04-01T23:09:22.147 回答