【问题标题】:an Easy Oracle Trigger amendment一个简单的 Oracle 触发器修正
【发布时间】:2012-09-12 03:12:30
【问题描述】:
我在我们的 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。如果INSERT 语句未提供值,我如何修改触发器使其仅生成新的id?
【问题讨论】:
标签:
oracle
triggers
plsql
【解决方案1】:
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;
【解决方案2】:
听起来你只是想要
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 默认值。
【解决方案3】:
只是另一种方法:
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 之前包含 :。