一个简单的 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 触发器修正的主要内容,如果未能解决你的问题,请参考以下文章

简单的 SQL oracle 触发器

Oracle 触发器的简单命令

oracle如何创建行级触发器?

oracle触发器与数据导入导出的简单使用

oracle触发器及异常处理 简单例子

Windows,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正