2012-09-12 18 views
1

我发现了一个触发我们的Oracle数据库一个简单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

回答

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; 

这使得一般合理的假设没有为列指定任何非空的缺省值。

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; 
+0

通过11秒打我 –

+0

@JustinCave我想我们两个副本&贴:D – Passerby

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