用sequences的话,需要在插入数据时语句做相应的变化,我是原来access转oracle,那样的话,代码量变化较大,所以需要用触发器的办法。
说得不对的地方,还望指教。

解决方案 »

  1.   

    你可以在触发器里使用sequence呀,如:
    CREATE SEQUENCE SEQ_TABLE_NAME START WITH 1 INCREMENT BY 1 MAXVALUE 9999999999 CYCLE NOCACHE;/*序列*/CREATE OR REPLACE TRIGGER TRG_TABLE_NAME /*触发器*/
    BEFORE INSERT ON TABLE_NAME
    FOR EACH ROW
    BEGIN
      SELECT SEQ_TABLE_NAME.NEXTVAL INTO :NEW.ID FROM DUAL;
    END;
    /
      

  2.   

    (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;