思路1:使用序列
创建序列:
 CREATE SEQUENCE seq_name
  INCREMENT BY 1
  START WITH 1
  MINVALUE 1
  MAXVALUE 999999999
  CYCLE
  NOORDER
  CACHE 50
 /
使用序列:
SELECT LTRIM(TO_CHAR(seq_name.NEXTVAL,'000000000')) INTO v_var FROM DUAL;思路2: 建一张表id_tb存储 最大序号
插入数据时 
SELECT ID INTO V_ID FROM ID_TB WHERE ROWNUM = 1 FOR UPDATE;
INSERT INTO TABLE_NAME(ID,...) VALUES(V_ID,...);
UPDATE SET ID_TB ID = ID+1;
COMMIT;

解决方案 »

  1.   

    --用sequence不就OK了吗!create sequence seq_Test increment by 1 start with 1;insert into Test values(seq_Test.NextVal);
      

  2.   

    使用sequence能达到自动编号的目的,但是误用了一次,且commit了
    就很难达到自动编号的目的了。MAX(ID)+1 能行吗?
      

  3.   

    不好意思!我是初次接解ORACLE,希望各位能够谅解,能不能给我讲解方法步骤详细一点,有劳了!
      

  4.   

    mschen(发光的星星) 那里已经解释的非常详细了.
      

  5.   

    (1)第一种方法   
    ORACLE一般的做法是同时使用序列和触发器来生成一个自增字段.
    CREATE   SEQUENCE   SEQname
      INCREMENT   BY     1
      START   WITH     1
      MAXVALUE     99999999
    /
    CREATE   TRIGGER   TRGname
    BEFORE     INSERT     ON   table_name
    REFERENCING
      NEW   AS   :NEW
    FOR   EACH   ROW
    Begin
          SELECT   SEQname.NEXTVAL
              INTO   :NEW.FIELDname
              FROM   DUAL;
    End;(2)第二种方法:
    CREATE   OR   REPLACE   TRIGGER   TR1
        BEFORE   INSERT   ON   temp_table
        FOR   EACH   ROW
    declare   
    com_num   NUMBER;
    BEGIN
    SELECT   MAX(ID)   INTO   COM_NUM   FROM   TEMP_TABLE;   
    :NEW.ID:=COM_NUM+1;
    END   TR1;