如果在update语句中未指定列,那么控制触发器是否仅设置值?例如,如果我在表/列上执行以下更新语句 -
update sampleTable set firstname='test', lastname='me' where id='id1';
在上面的情况下,由于firstname和lastname列都被更新,我不希望在update trigger之前做任何事情。但是,如果执行以下语句 -
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条件赢了不满足并且姓氏不会被设置为null。当然我错了,在两个更新语句中,它仍然最终将lastname更新为null。
我有什么选择?我正在使用Oracle 11g。
答案 0 :(得分:0)
如果您希望lastname
设置为null,如果update语句未引用此列,则可以使用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;
/