1

我在我们的 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每次插入一行时自动生成。如何修改触发器,使其仅idINSERT语句未提供值时生成新触发器?

4

3 回答 3

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;
于 2012-09-12T03:21:08.813 回答
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 默认值。

于 2012-09-12T03:21:18.577 回答
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.

于 2012-09-17T07:19:02.877 回答