使用序列 create sequence QID minvalue 1 maxvalue 999999999999999999999999999 start with 1 increment by 1 cache 20;
在oracle中没有自增字段这种说法,但是oracle提供了一个sequence和获取sequence的方法,可以完成类似于sql server或者access中的自增字段,sequence的创建方法如下(以你的要求为例): create sequence myseq minvalue XXXXX000001 maxvalue XXXXX999999 start with XXXXX000001 increment by 1然后你需要通过select SEQ_TASK.nextval in myvar from dual获取下一个数字,将获取的数字放进你的变量中(myvar是你定义的变量,然后需要在insert纪录的时候将myvar赋值为相应的字段就可以了 )
CREATE SEQUENCE a.SEQ_ID START WITH 1 INCREMENT BY 1 MAXVALUE 1E30 NOCYCLE NOCACHE; 一种就是在INSERT 语句中不对ID字段赋值,通过触发器实现:CREATE OR REPLACE TRIGGER a.TRIG_a_ID BEFORE INSERT ON a.a FOR EACH ROW BEGIN IF (:NEW.ID IS NULL) THEN SELECT 'A' || SEQ_ID.NEXTVAL INTO :NEW.ID FROM DUAL; END IF; END; /也可以直接写在 INSER 语句中:INSERT INTO A.A(ID,....)VALUES('A' || SEQ_ID.NEXTVAL,....);
create sequence QID
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;
create sequence myseq
minvalue XXXXX000001
maxvalue XXXXX999999
start with XXXXX000001
increment by 1然后你需要通过select SEQ_TASK.nextval in myvar from dual获取下一个数字,将获取的数字放进你的变量中(myvar是你定义的变量,然后需要在insert纪录的时候将myvar赋值为相应的字段就可以了 )
一种就是在INSERT 语句中不对ID字段赋值,通过触发器实现:CREATE OR REPLACE TRIGGER a.TRIG_a_ID
BEFORE INSERT ON a.a
FOR EACH ROW
BEGIN
IF (:NEW.ID IS NULL) THEN
SELECT 'A' || SEQ_ID.NEXTVAL INTO :NEW.ID FROM DUAL;
END IF;
END;
/也可以直接写在 INSER 语句中:INSERT INTO A.A(ID,....)VALUES('A' || SEQ_ID.NEXTVAL,....);