oracle sequence ( 序列)
程序员文章站
2022-04-04 15:53:47
...
--序列 /* 定义语法 CREATE SEQUENCE <sequence_name> INCREMENT BY <integer> 每次的增量 START WITH <integer> 起始值 default=1 MAXVALUE <integer> / NOMAXVALUE 最大值或不限定 MINVALUE <integer> / NOMINVALUE 最小值或不限定 CYCLE / NOCYCLE 达到最大值时循环 或不循环 default NOCYCLE CACHE <#> / NOCACHE 缓存(default 20) 或不循环 ORDER / NOORDER; 排序或不排序 默认NOORDER */ create sequence seq_bird_1 increment by 1 --每次加1 start with 1 --从1开始计数 maxvalue 100000 --最大值 minvalue 1 --最小值 nocycle --一直累加,不循环 cache 20 --缓存 20 noorder --不指定排序顺序 ; create sequence ssss; select ssss.nextval from dual; alter system flush shared_pool;--清空缓存,需要有足够的权限 --再次获取序列的nextval值,会把cache的最后一个值加上增量返回 select ssss.nextval from dual; --select sys_guid() from dual; --查询序列信息 定义属性信息都可查看到 select * from user_sequences us where us.sequence_name='SEQ_BIRD_1'; select * from user_objects uo where uo.object_name='SEQ_BIRD_1' and uo.object_type='SEQUENCE'; --使用序列 declare v_seq int; begin for i in 1..100 loop--循环取100次 select seq_bird_1.nextval into v_seq from dual;--下一个值 dbms_output.put('nextVal'||v_seq||'------'); --当前值,刚创建的seq,必须执行nextval才可获取currval select seq_bird_1.currval into v_seq from dual; dbms_output.put('currVal'||v_seq); dbms_output.put_line('-'); end loop; end; select seq_bird_1.nextval from dual; --修改序列 除了start with不能修改其他的都可以修改 alter sequence seq_bird_1 increment by 2; --删除序列 drop sequence seq_bird_1; --把序列重置,回到初始位置 相当于间距修改序列的start with --创建用于重置的序列 create sequence seq_test_2 start with 1 increment by 1; --多执行几次nextval, select seq_test_2.nextval from dual; --创建用于重置序列的过程,参数为序列的名字 create or replace procedure reset_seq(seq_name varchar2) as curr_val int; d_sql_1 varchar2(200); d_sql_2 varchar2(200); begin --把当前的序列值存放到变量中 d_sql_1 :='select '||seq_name||'.nextval from dual'; execute immediate d_sql_1 into curr_val; --修改序列增量为当前当前值的相反数-1 curr_val := -(curr_val-1); d_sql_2 := 'alter sequence '||seq_name||' increment by '||curr_val; execute immediate d_sql_2; --按上面修改的增量执行一次查询nextval,这时序列当前值变为1 execute immediate d_sql_1 into curr_val; --从新设置序列的增量为1 d_sql_2 := 'alter sequence '||seq_name||' increment by 1'; execute immediate d_sql_2; --execute immediate d_sql_1 into curr_val; --dbms_output.put_line('修改后的现在序列初始值是:'||curr_val); end; --调用过程 begin empty_seq('seq_test_2'); end; --reference --http://psoug.org/reference/sequences.html
上一篇: win7资源管理器总是崩溃怎么办