oracle 本身系统就有这个功能,自动会在表最后加上一个20位的ROWID字段,varchar型的。每条记录的RowID都不一样

解决方案 »

  1.   

    可以做一个触发器。
    当插入的时候会自动触发将ID加一。
    create or replace trigger auto_increase_id
     before insert on test
     for each row
     declare
     next_id number;
     begin
     select seq_test.nextval
     into next_id
     from dual;
     :new.id:=next_id;
     end;
      

  2.   

    做一个sequences(序列sq)定义它的初始值、最大值、增长值。插入语句如下:
    insert into mytable (name,id) values("myname",sq.nextval);
      

  3.   

    使用一个序列(sequence),它是一个类似sql server中id的对象,但是在使用时oracle不保证存储时sequence的连续性。
      

  4.   

    之前我给的代码是把序列建在触发器里。
    在插入的时候
    例如:insert into tablename (id,name) values(0,'name');
    把插序列的地方写个0就可以了。免得每次插入是写xxx.nextval这句话太麻烦。
      

  5.   

    sequence怎么定义啊,?
    给个例子吧
      

  6.   

    CREATE SEQUENCE LOCATIONS_SEQ
        INCREMENT BY 100
        START WITH 1
        MAXVALUE 9900
        MINVALUE 1
        NOCYCLE 
        NOCACHE
        NOORDER则建立了一个系列,LOCATIONS_SEQ是系列名,NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。
      

  7.   

    create sequence sq_id
    minvalue 1 maxvalue 999999999999
    start with 1
    increment by 1
    cache 20;
    应该能看明白吧
    可结合nextval(下一值))和currval(当前值)使用。
    但是不保证sequence具有连续性,因为调用一次nextval,该序列就会自动加increment
      

  8.   

    create trigger  xxx  before insert on "table_name" for each rowdeclare 
    newId nummber;
    begin
    select sequence.nextval() into newid from dual;
    New.id:=newid;
    end;/