每天自增不重复序列
今天遇到一个问题,要求:序号从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序列新的一天又从新开始解决办法