前两天撸代码写了pdf套打,今天发现还有一个东西没有实现就是需要重置序列,在每年的1月1日0点0时0分重置序列。虽然超级简单,但是依然感觉好多坑,不知道是不是oracle版本问题导致的。
首先我找了万能的度娘,结果度娘给出了好几个答案,首先是重置序列。
很多大神给出了答案,就是反向生成,然后再设置成1的。但是同样的代码到我这里就直接报错了,而且执行那个函数以后序列的增量还变成了负数,完全没改回来。后来发现加了minvalue 0居然就OK,emmmmmmmm,我也不知道为什么。好神奇。
以下是我生效的重置序列的代码
create or replace procedure seq_wszmkj_reset as
n number(10);
tsql varchar2(100);
begin
execute immediate 'select sswszm_sequence.nextval from dual'
into n;
n := -n;
tsql := 'alter sequence sswszm_sequence increment by ' || n;
execute immediate tsql;
execute immediate 'select sswszm_sequence.nextval from dual'
into n;
tsql := 'alter sequence sswszm_sequence increment by 1 minvalue 0';
execute immediate tsql;
end seq_wszmkj_reset;
其中&#x