请教一个关于Oracle序列取值的问题,请大侠指教

beyondchen920 2010-01-11 02:55:45
请教一个关于Oracle序列取值的问题,请大侠指教

现在在开发一个程序,后台用的oracle 10g 数据库,其中有个主表,主键是根据记录数逐条递增的字符串,字符串最后5位是用oracle 序列算出的号。
现在业务上需要每天从0点开始,主键的最后5位数从1开始计数,然后到下一天0点开始,该数自动再重1开始计数。
之前我做了个序列用来逐次递增取值,又因为要从每天0点从1开始重新计数,我又写了个job,让JOB在每天0点0分1秒,重建序列,这样的话序列就重新重1开始取值,可是运行了一阵之后,发现JOB每次运行的时间出现了延时,最新一次 是0点1分14秒执行的,这样的话从0点到0点1分14秒之间,我的主键最后5位取的还是重建前计数器的值,可是当0点1分14秒之后,重建了序列后,序列从1开始重新取值,这样就出现了一个严重的问题,0点1分14秒之后,从序列取出的值又可能和 0点到0点1分14秒这段时间取的序列值重复,这就造成了主键重复,请问各位有类似的方案吗,从哪着手解决这个问题?
...全文
193 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iqlife 2010-01-14
  • 打赏
  • 举报
回复
顶楼上的,我也是这么想的,两个奇偶序列实现
SambaGao 2010-01-14
  • 打赏
  • 举报
回复
学习了。
BenChiM888 2010-01-13
  • 打赏
  • 举报
回复
建两个序列解决问题,在你第一个job调用的procedure中判断
1、是奇数天的时候调用序列1生成
2、是偶数天的时候调用序列2生成

相反的在第二个job中
1、奇数天的时候重建第2个序列
2、偶数天的时候重建第1个序列

这样就不用担心job延迟问题了,总有一个序列会提前一天达到你要的标准。

crazylaa 2010-01-11
  • 打赏
  • 举报
回复
你的主键有问题,如果按照你的方式,主键应该是
to_number(to_char(sysdate,'YYYYMMDDHH24MISS')||to_char(seq_id.nextVal,'00000'))
精确到年月日时分秒+序列,就不会出现这种问题。
小灰狼W 2010-01-11
  • 打赏
  • 举报
回复
什么是主键?联合主键除了序列填充的这个字段外,另一个字段是时间吧?这个字段的值精确到天?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧