zoukankan      html  css  js  c++  java
  • 每天自增不重复序列

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

  • 相关阅读:
    jfinal使用配置文件注意事情
    在项目中集成jetty server
    JFinal快速上手及注意事项
    表单处理的方案与注意事项(servlet)
    java四大会话技术
    servlet过滤器简化版
    python 生成器
    python 深复制和浅复制
    python 获取路径
    python selenium定位总结(转)
  • 原文地址:https://www.cnblogs.com/yhzh/p/5920195.html
Copyright © 2011-2022 走看看