一个简单的 Oracle 触发器修正
Posted
技术标签:
【中文标题】一个简单的 Oracle 触发器修正【英文标题】:an Easy Oracle Trigger amendment 【发布时间】: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
?
【问题讨论】:
【参考方案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;
【讨论】:
@JustinCave 我想我们都复制和粘贴:D【参考方案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
之前包含 :
。
【讨论】:
以上是关于一个简单的 Oracle 触发器修正的主要内容,如果未能解决你的问题,请参考以下文章