[问题] 关于数据库流水号的问题

楼主: u9423504 (缘投农夫)   2016-01-06 01:00:04
各位前辈好:
小弟使用的数据库是Oracle。想请教各位,如何产生以当天日期为主的流水号,而且
日期每过一天,流水号的编号就从01开始编起。例如:15121301、15121302
、15121303、15121401、15121402等。其中,‘15’表示是西元2015年。
其流水号格式为:yymmdd+2码的流水号。而且要避免线上多人同时Insert资料时产生
重复的编号。且该流水号的资料字段格式是Varchar。
小弟目前想到的方法是:以当天的日期加上like 和 count 去做 select,若都没有找到
则日期补上01;若有找到,则日期前加上
count回传的笔数+1。
不知是否有更好的方法呢?!
作者: swpoker (swpoker)   2016-01-06 02:14:00
sequence?这样会重复,或用某参数表用for update
作者: now99 (陈在天)   2016-01-06 07:08:00
时间要到秒
作者: ssccg (23)   2016-01-06 09:27:00
就当天的日期加一个sequence不就好了? sequence每天reset
作者: mrforget (财去人安乐)   2016-01-06 18:51:00
create sequence [sequence_name] start with 1increment by 1 ;sequence_name.nextval
作者: Lordaeron (Terry)   2016-01-06 23:45:00
作个TABLE 负责SEQUENCE, 再用SELECT FOR UPDATE 来锁.
作者: BlueBird5566 (生日56)   2016-01-08 21:24:00
因为不确定你的是什么系统 使用者输入什么资料但通常都是user一进页面就要取seq.nextval 埋在背景user送出资料就把这seq一起送出 insert到table就是号码牌的概念 这样不会重复取号 但容易跳号但是用oracle要不跳号也很难就是了
作者: flowwinds (..)   2016-01-10 21:33:00
用个table存流水号,结构(表流水号,目前流水号,时间)资料是像这样(1,12,'150108'),每次取号用update tableset 目前流水号=目前就水号+1 where 时间='150108'returning 目前流水号;流水号表的record可以一次生成一年份, 365/366笔取号则是在insert前, 可以是另一个独立的transaction基本上类似楼上大大的方法..

Links booklink

Contact Us: admin [ a t ] ucptt.com