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;