一个老话题: :-)http://expert.csdn.net/Expert/topic/1465/1465844.xml?temp=.93685551、建立序列: CREATE SEQUENCE checkup_no_seq NOCYCLE MAXVALUE 9999999999 START WITH 2;2、建立触发器: CREATE OR REPLACE TRIGGER set_checkup_no BEFORE INSERT ON checkup_history FOR EACH ROW DECLARE next_checkup_no NUMBER; BEGIN --Get the next checkup number from the sequence SELECT checkup_no_seq.NEXTVAL INTO next_checkup_no FROM dual;
--use the sequence number as the primary key --for the record being inserted :new.checkup_no := next_checkup_no; END;
其实也可以用函数。在建表的时候,将改字段的default值设为获取递增值的函数,在函数中返回序列的下一个值,当然函数也可以从其他途径(比如其他表等)得到当前递增的ID值。create table test ( id number(10) default func_abc, ... );create or replace function func_abc return number is begin return seq1.nextval; end;
CREATE SEQUENCE checkup_no_seq
NOCYCLE
MAXVALUE 9999999999
START WITH 2;2、建立触发器:
CREATE OR REPLACE TRIGGER set_checkup_no
BEFORE INSERT ON checkup_history
FOR EACH ROW
DECLARE
next_checkup_no NUMBER;
BEGIN
--Get the next checkup number from the sequence
SELECT checkup_no_seq.NEXTVAL
INTO next_checkup_no
FROM dual;
--use the sequence number as the primary key
--for the record being inserted
:new.checkup_no := next_checkup_no;
END;
( id number(10) default func_abc,
...
);create or replace function func_abc
return number is
begin
return seq1.nextval;
end;