每天自增不重复序列

今天遇到一个问题,要求:序号从00001-9999,每天不重复。

如果用代码实现,当然是可以,但是如果不持久化,就没法记住上次获取的值,也没有好办法,只好靠自己动手了。

oracle数据库有张配置表,添加一条序号配置key是FY_PROJECT_SSN,值就是1。

每次去取值的时候

#防止取到今天之前的值
update t_config t set value
='1', update_time=sysdate where trunc(update_time)!=trunc(sysdate) and status='1' and key_name='FY_PROJECT_SSN' select value,lpad(value,4,'0') REMARK,UPDATE_TIME
from t_config t where status='1' and key_name='FY_PROJECT_SSN'

取完值后,更新字段值+1:value=value+1,传回取到的UPDATE_TIME

update t_config t
set value=(
case when trunc(update_time)!=trunc(sysdate)
then '1'
else #{value,jdbcType=VARCHAR}
end
),
UPDATE_PER = #{updatePer,jdbcType=VARCHAR},
UPDATE_TIME = sysdate
where (trunc(update_time)!=trunc(sysdate) or
(value<9999 and value <(#{value,jdbcType=VARCHAR}+0) and UPDATE_TIME <=#{updateTime,jdbcType=TIMESTAMP}))
and 10000 >#{value,jdbcType=VARCHAR} and 0 < #{value,jdbcType=VARCHAR}
and status='1' and key_name='FY_PROJECT_SSN'

使用value=value+1,并加上UPDATE_TIME条件,可以满足多线程并发的问题

从代码上看,sql麻烦了些,不知道还有什么其它好办吧?时间等待中..........

也可以参考:oracle序列新的一天又从新开始解决办法

原文地址:https://www.cnblogs.com/yhzh/p/5920195.html