一个简单的Oracle触发器修正

时间:2012-09-12 03:12:31

标签: oracle triggers plsql

我在Oracle数据库中找到了一个触发器

create or replace trigger pii_user_activation_trigger
  before insert on pii_user_activation
  for each row
begin
  select seq_pii_user_activation.nextval 
    into :new.id 
    from dual;
end;

我不希望触发器在每次插入行时自动生成id。如果id语句没有提供值,我该如何修改触发器以便它只生成新的INSERT

3 个答案:

答案 0 :(得分:4)

create or replace trigger pii_user_activation_trigger
  before insert on pii_user_activation<
  for each row
begin
  IF :new.id IS NULL THEN
    select seq_pii_user_activation.nextval 
      into :new.id 
      from dual;
  END IF;
end;

答案 1 :(得分:3)

听起来你只是想要

create or replace trigger pii_user_activation_trigger
  before insert on pii_user_activation
  for each row
begin
  IF( :new.id IS NULL )
  THEN
    select seq_pii_user_activation.nextval 
      into :new.id 
      from dual;
  END IF;
end;

这使得通常合理的假设是没有为列指定非NULL默认值。

答案 2 :(得分:1)

另一种方法:

create or replace trigger pii_user_activation_trigger
  before insert on pii_user_activation
  for each row
  WHEN (NEW.id IS NULL)
begin
  select seq_pii_user_activation.nextval 
    into :new.id 
    from dual;
end;

(请注意,在WHEN子句中,您未在:之前添加NEW