我这边在工作中会有每天重置序列从1开始计数,但是运行了差不多两年后出现了问题。
我的重置代码如下:
create or replace procedure reset_seq(p_seq_name in varchar2) is
l_val number;
begin
execute immediate 'select ' || p_seq_name || '.nextval from dual'
INTO l_val; --1
execute immediate 'alter sequence ' || p_seq_name || ' increment by -' ||
l_val || ' minvalue 0'; --2
execute immediate 'select ' || p_seq_name || '.nextval from dual'
INTO l_val; --3
execute immediate 'alter sequence ' || p_seq_name ||
' increment by 1 minvalue 0'; --4
end;
出现的问题为,步长变成负值,起始值也变成了负值。
经过大致的分析,我认为问题应该是出现在来对序列的同时操作上
即步骤 3
看起来是要给序列加上锁,但是目前对数据库的功底还是有点差,还请大神帮忙看看是否有更好的解决方案
貌似Oracle begin 和end之间是原子性的操作,但是为什么我观察到的现象确不是呢,求大佬解释!!!