Oracle 中的序列咱们通常用来生成流水号,因此须要进行重置(如天天凌晨重置一次),咱们虽然能够经过从新编译的方式重置序列,但是这种方法会有弊端,好比致使与该序列相关的存储过程或函数失效等等,须要从新编译;因而就须要一种不编译也能够重置序列的方法——sql
这种方式,不用删除,利用步长参数,先查出sequence的nextval,记住,把递增改成负的这个值(反过来走),而后再改回来。函数
假设须要修改的序列名:seq_namespa
一、select seq_name.nextval from dual; //假设获得结果5656rem
二、 alter sequence seq_name increment by -5655; //注意是-(n-1)编译
三、 select seq_name.nextval from dual;//再查一遍,走一下,重置为1了select
四、 alter sequence seq_name increment by 1;//还原方法
能够写个存储过程,如下是完整的存储过程,而后调用传参便可: im
create or replace procedure seq_reset(v_seqname varchar2) as n number(10); tsql varchar2(100); begin execute immediate 'select '||v_seqname||'.nextval from dual' into n; n:=-(n-1); tsql:='alter sequence '||v_seqname||' increment by '|| n; execute immediate tsql; execute immediate 'select '||v_seqname||'.nextval from dual' into n; tsql:='alter sequence '||v_seqname||' increment by 1'; execute immediate tsql;