oracle中的自动序列

时间:2015-03-02 16:31:19

标签: sql oracle

我正在尝试使用触发器创建一个自动序列号genaration但它在插入值时给了我跟随的错误。

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;

如果我在下面激励,那么我可以插入值

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

注意:我不想禁用触发器

2 个答案:

答案 0 :(得分:4)

ORA-00947:值不够 - 意味着表中有n列,但您只提供(n-m)个字段的值。

在您的情况下,如果您不想插入唯一ID,则可能需要执行

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

答案 1 :(得分:-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放在插入的相应值字段中,它应该可以正常工作