每插入一条数据就自动增长...以前那个好用了的.不知道换了数据库...在使用就不好用了...这是我的表.seq_id想让他是自动增长列
create table bug( 
seq_id number,
pc_id  varchar2 (8),
desc_cont  varchar2 (200), 
bug_date date,  
bug_cont varchar2 (200), 
bug_state  varchar2 (1), 
bug_type  varchar2 (2), 
res   varchar2 (200), 
finishdate date,
pc_type varchar2 (2),
bug_ip varchar2 (20)
); ALTER TABLE bug ADD (
  CONSTRAINT bug PRIMARY KEY (seq_id)
   );________________________________
这是以前建立sequences的语句
create sequence Sequence_bug 
increment by 1 
start with 1 
事务语句
create trigger tib_bug before insert 
on bug for each row 
declare 
    integrity_error  exception; 
    errno            integer; 
    errmsg           char(200); 
    dummy            integer; 
    found            boolean; begin 
        select Sequence_bug.NEXTVAL INTO :new.seq_id from dual; 
exception 
    when integrity_error then 
       raise_application_error(errno, errmsg); 
end;为什么上面建立以后不好用了....哪位大侠...看看..再改改...顺便把插入语句sql...写一个看看...

解决方案 »

  1.   

    好像不可以建自动增长列
    但可以建一个自动增长的序列
    create sequence SEQ_test
    minvalue 1000000000000001
    maxvalue 9999999999999999
    start with 1000000000000001
    increment by 1
    cache 20;
    然后在表中插记录的时候去取这个序列的下一个值insert into table (col)value(seq_test.nexval);
    这样应该可以达到你的要求
      

  2.   

    不太了解,如果是主键列的话,
    在你做INSERT的时候
    是先触发触发器呢,还是先触发主键检查呢?
      

  3.   

    那我,每次添加一条数据的时候是不是应该这么写啊是应该insert into bug (seq_id,pc_id) values (seq_id.NEXTVAL,'2')还是这样啊
    insert into bug (seq_id,pc_id) values (Sequence_bug.NEXTVAL,'2')
      

  4.   

    这样啊 
    insert into bug (seq_id,pc_id) values (Sequence_bug.NEXTVAL,'2')
      

  5.   


    应该是这样的,不过好像还缺少了commit;语句拉,可能这样才导致你看不到结果吧
      

  6.   

    insert into bug (seq_id,pc_id) values (Sequence_bug.NEXTVAL,'2') 为什么要这样去写...不是又事务了吗?
    不能不单独吧这个seq_id插入的Sequence_bug.NEXTVAL非要写上吗?插入的时候...他自己不能自动增加吗?做的事务不是做的这样的操作吗
      

  7.   

    插入的时候...他自己不能自动增加吗?
    =================================
    oracle 自增列的实现不同于 sql server,sql server 靠列的 identity 属性来实现,可以在 insert 后自动增长,oracle 靠 sequence 类型的数据库对象来实现,而 sequence 是在用 nextval 函数取值后自动增长。
      

  8.   


    应该是这样bug (seq_id,pc_id) 表中的字段一般是主键 
    Sequence_bug.NEXTVAL,'2' 要插入的值
    Sequence_bug.NEXTVAL 这个是序列对表进行插入后回自动的增加
      

  9.   


    create or replace trigger tri_test
    before insert on 表名
    for each row
    declare
      tempnum number;
    begin
      select 序列号.nextval into tempnum from dual;
      :new.表名自增字段名 := tempnum;
    end tri_test;例如:
    create or replace trigger tri_rr_tastchange
    before insert on rr_tastchange
    for each row
    declare
      tempnum number;
    begin
      select seq_rr_tastchange.nextval into tempnum from dual;
      :new.tc_id := tempnum;
    end tri_rr_tastchange;
      

  10.   

    insert into bug (seq_id,pc_id) values (Sequence_bug.NEXTVAL,'2');
      

  11.   

    Oracle真JB麻烦,想搞个自动增长还要写个触发器,要不就是程序里还要什么序列NEXT一下,在这点上还真是不如MS SQLSERVER,各位看呢,呵呵
      

  12.   

    既然在触发器中写了自增长就可以了
    插入时不用再管自增长的列
    insert into bug (pc_id) values ('1');