
一、梳理
流水号的递增是我们在开发中经常会遇到的问题,我们可以通过序列实现。通过定时任务执行存储过程定时去重置序列的起始数字以及增量的值。
二、存储过程
入参 V_SEQNAME 是传递要重置的序列
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;
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;
end SEQ_RESET;
三、新建序列表

四、定时任务
新建一个定时任务,控制好要重置的时间,可以每时每天每个月等等执行重置的存储过程,达到重置序列的目的,VINDA_SEQ为序列表。

五、使用
在记录的新建的before insert的触发器里面将序列的值写入到记录的字段,select VINDA_SEQ.nextval into nextcode from sys.dual;
赋值给变量nextcode,然后 :new.ATTRIBUTE5:=nextcode;ATTRIBUTE5
保存着流水号的值。
create or replace trigger vinda_prodcheck_info_TRIGER
before insert on vinda_prodcheck_info
for each row
declare
nextid number;
nextcode number;
begin
IF :new.RECORD_ID IS NULL or :new.RECORD_ID=0 THEN
select vinda_prodcheck_info_SEQ.nextval
into nextid
from sys.dual;
select VINDA_SEQ.nextval
into nextcode
from sys.dual;
:new.RECORD_ID:=nextid;
:new.ATTRIBUTE5:=nextcode;
end if;
end vinda_prodcheck_info_TRIGER;
六、结束
其他博客:
docker安装18.03.0+rancher1.6.17 的容器虚拟化部署
vue.js+iview 实现全局加载的公用方法
欢迎留言评论学习