可以做一个触发器。 当插入的时候会自动触发将ID加一。 create or replace trigger auto_increase_id before insert on test for each row declare next_id number; begin select seq_test.nextval into next_id from dual; :new.id:=next_id; end;
做一个sequences(序列sq)定义它的初始值、最大值、增长值。插入语句如下: insert into mytable (name,id) values("myname",sq.nextval);
之前我给的代码是把序列建在触发器里。 在插入的时候 例如:insert into tablename (id,name) values(0,'name'); 把插序列的地方写个0就可以了。免得每次插入是写xxx.nextval这句话太麻烦。
sequence怎么定义啊,? 给个例子吧
CREATE SEQUENCE LOCATIONS_SEQ INCREMENT BY 100 START WITH 1 MAXVALUE 9900 MINVALUE 1 NOCYCLE NOCACHE NOORDER则建立了一个系列,LOCATIONS_SEQ是系列名,NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。
create sequence sq_id minvalue 1 maxvalue 999999999999 start with 1 increment by 1 cache 20; 应该能看明白吧 可结合nextval(下一值))和currval(当前值)使用。 但是不保证sequence具有连续性,因为调用一次nextval,该序列就会自动加increment
create trigger xxx before insert on "table_name" for each rowdeclare newId nummber; begin select sequence.nextval() into newid from dual; New.id:=newid; end;/
当插入的时候会自动触发将ID加一。
create or replace trigger auto_increase_id
before insert on test
for each row
declare
next_id number;
begin
select seq_test.nextval
into next_id
from dual;
:new.id:=next_id;
end;
insert into mytable (name,id) values("myname",sq.nextval);
在插入的时候
例如:insert into tablename (id,name) values(0,'name');
把插序列的地方写个0就可以了。免得每次插入是写xxx.nextval这句话太麻烦。
给个例子吧
INCREMENT BY 100
START WITH 1
MAXVALUE 9900
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER则建立了一个系列,LOCATIONS_SEQ是系列名,NOCYCLE 表示序列在达到最小值或最大值后将不再生成其他值。NOCACHE 表示序列值在被请求之前不会进行分配;可使用预分配机制来改善性能。NOORDER 表示在生成编号时,不能保证按照请求编号的顺序返回这些编号。
minvalue 1 maxvalue 999999999999
start with 1
increment by 1
cache 20;
应该能看明白吧
可结合nextval(下一值))和currval(当前值)使用。
但是不保证sequence具有连续性,因为调用一次nextval,该序列就会自动加increment
newId nummber;
begin
select sequence.nextval() into newid from dual;
New.id:=newid;
end;/