【问题标题】: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;
    

    【讨论】:

    • @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 之前包含 :

      【讨论】:

        猜你喜欢
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 2016-12-27
        • 2020-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        相关资源
        最近更新 更多