你可以在触发器里使用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; /
(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;
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;
/
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;