2015-03-02 18 views
0

我正在尝试使用触发器创建一个自动序列号genaration,但是在插入值时它给了我下面的错误信息。在oracle中的自动序列

ALTER TABLE sppinv_tblinventory_ex ADD (
    CONSTRAINT sppinv_tblinventory_PK PRIMARY KEY (uniqueid)); 

create sequence row_seq ; 

create or replace trigger row_count before insert on sppinv_tblinventory_ex 
for each row 

begin 
select row_seq.nextval into : new.uniqueid from dual; 
end; 

如果我下面excuting然后我可以插入值

insert into sppinv_tblinventory_ex 
select row_seq.nextval, 
    b.member_id,b.src_claim_nbr,b.client_nbr,b.src_platform_cd, 
    b.suspense_date,b.batch_gen_key,b.bucket_name,b.grouper_rule, 
    b.event_number,b.case_stat,b.case_stat_dt,b.assigned_to, 
    b.assigned_on,b.followup_dt,b.release_ind,b.release_dt, 
    b.viewtype 
from sppinv_tblinventory b 

当我将与出UNIQUEID我收到错误,如下面

insert into sppinv_tblinventory_ex 
select b.member_id,b.src_claim_nbr,b.client_nbr,b.src_platform_cd, 
    b.suspense_date,b.batch_gen_key,b.bucket_name,b.grouper_rule, 
    b.event_number,b.case_stat,b.case_stat_dt,b.assigned_to, 
    b.assigned_on,b.followup_dt,b.release_ind,b.release_dt, 
    b.viewtype 
from sppinv_tblinventory b 

ORA-00947: not enough values 

注意的值:我不想禁用触发器

+6

它的供应,即使你提供的每一个值的列列表很好的做法,因为列可能不按照您期望的顺序排列,并且更容易发现错误;当你没有提供每个价值时,这是必需的,就像在这种情况下一样。 – 2015-03-02 16:43:44

+0

当您列出所有列并希望“排除”某些值时,您还可以使用关键字'DEFAULT'。 – ibre5041 2015-03-02 20:32:12

回答

-1

有这么多的答案在互联网上...
尝试清除new.uniqueid之前的空格;并添加一个IF测试是这样的:

create or replace trigger row_count 
before insert on sppinv_tblinventory_ex 
for each row 
begin 
    IF :new.uniqueid IS NULL THEN 
     select row_seq.nextval into :new.uniqueid from dual; 
    END IF; 
end; 

现在,如果你把null在你插入相应的值字段,它应该工作

+0

这不是问题...... OP在插入时不够 - 值,而不是触发器编译错误。 – 2015-03-02 16:41:10

+0

我编辑了我的答案,在触发器代码中添加了一个IF测试,如果OP在他的第一个字段中使用“null”,它应该可以工作。 – 2015-03-02 16:43:52

+0

我同意冒号和'new'之间不应该有空格,但这不是被问及的问题。这并没有解决ORA-00947。如果null是作为选择列表中的第一个值提供的,它就可以工作,但是如果没有添加“if”,情况就是如此。 – 2015-03-02 16:49:53

4

ORA-00947:没有足够的价值观 - 意味着你有n个表中的列,但您只提供(nm)个字段的值。

在你的情况,如果你不想来插入唯一的ID,那么你可能需要做

Insert into sppinv_tblinventory_ex (col1, col2, col3.. coln) select (val1, val2, val3 .. valn)