ORACLE中如何实现自增字段:(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;

解决方案 »

  1.   

    begin
    select sequenceID.nextval into :new fieldID from dual
    end
      

  2.   

    http://expert.csdn.net/Expert/topic/1188/1188814.xml?temp=.7129633
      

  3.   


    begin
    select sequenceID.nextval into :new.fieldID from dual;
    end
      

  4.   

    CREATE TRIGGER TRGname
    BEFORE  INSERT  ON table_name
    REFERENCING
     NEW AS :NEW
    FOR EACH ROW
    Begin
    --   SELECT SEQname.NEXTVAL INTO :NEW.FIELDname FROM DUAL;
    --  去掉了原来的语句
       INSERT INTO table_name(FIELDname) VALUES(SEQname.NEXTVAL);
    End;这样改了之后,效果是不是更好一些?
      

  5.   

    小弟刚看了一本书上说不要频繁的使用select X from dual,不知道这个使用序列的触发器上是否也适用?
      

  6.   

    Sorry , 写错了。
     CREATE TRIGGER TRGname
    BEFORE  INSERT  ON table_name
    REFERENCING
     NEW AS :NEW
    FOR EACH ROW
    Begin
    --   SELECT SEQname.NEXTVAL INTO :NEW.FIELDname FROM DUAL;
    --  去掉了原来的语句
       new.FIELDname = SEQname.NEXTVAL;
    End;