触发器未使用Reference触发

时间:2016-02-20 02:58:16

标签: oracle stored-procedures

我正在编写一个触发器,它将触发更新并插入一个表并插入另一个表。触发器看起来像这样。

create or replace trigger update_test_history
  before insert or update on demo.test_req REFERENCING NEW AS NEW OLD AS old
  for each row
declare
  v_count number(1);
begin

     if :old.quote_request_id != null then
       --Update History table
       insert into demo.test_req_history
         (history_id,
          req_id)
       values
         (isisdba.req_hist_seq.nextval,
          :old.req_id);
      end if;

end update_test_history;

此触发器不适用于DML。但是,如果我删除if条件,那么它开始工作。 有人可以告诉我这是错的吗? 提前致谢。

1 个答案:

答案 0 :(得分:1)

null永远不会等于任何值,包括nullnull也永远不会与包括null在内的其他值不相等。声明

if( <<some expression>> != null )
then
  <<do something>>
end if;

将进入<<do something>>区块。

也不会
if( <<some expression>> = null )
then
  <<do something>>
end if;

您必须使用三元逻辑来处理nullis nullis not null。看起来你可能想要

if( :old.quote_request_id is not null )
the
  <<do something>>
end if;