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