作者u9423504 (缘投农夫)
看板java
标题[问题] 关於资料库流水号的问题
时间Wed Jan 6 01:00:04 2016
各位前辈好:
小弟使用的资料库是Oracle。想请教各位,如何产生以当天日期为主的流水号,而且
日期每过一天,流水号的编号就从01开始编起。例如:15121301、15121302
、15121303、15121401、15121402等。其中,『15』表示是西元2015年。
其流水号格式为:yymmdd+2码的流水号。而且要避免线上多人同时Insert资料时产生
重覆的编号。且该流水号的资料栏位格式是Varchar。
小弟目前想到的方法是:以当天的日期加上like 和 count 去做 select,若都没有找到
则日期补上01;若有找到,则日期前加上
count回传的笔数+1。
不知是否有更好的方法呢?!
--
阴律无情!是的,犯邪淫者,小如手淫、婚前性行为
均会遭折福减寿之恶报。国考者更不能犯淫邪,
否则文昌帝君会除去功名,不信请看此忏悔文:
http://lustwarn.blogspot.tw/
阴律无情!是的,犯邪淫者,若不忏悔发心改过永不再犯,
死後必入邪淫地狱,不信请看;
http://goo.gl/tchBZY
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 113.183.100.11
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1452013210.A.B5E.html
1F:推 swpoker: sequence? 01/06 02:14
2F:→ swpoker: 这样会重复,或用某参数表用for update 01/06 02:16
3F:推 now99: 时间要到秒 01/06 07:08
4F:→ ssccg: 就当天的日期加一个sequence不就好了? sequence每天reset 01/06 09:27
5F:推 mrforget: create sequence [sequence_name] start with 1 01/06 18:51
6F:→ mrforget: increment by 1 ; 01/06 18:51
7F:→ mrforget: sequence_name.nextval 01/06 18:52
8F:→ Lordaeron: 作个TABLE 负责SEQUENCE, 再用SELECT FOR UPDATE 来锁. 01/06 23:45
9F:→ BlueBird5566: 因为不确定你的是什麽系统 使用者输入什麽资料 01/08 21:24
10F:→ BlueBird5566: 但通常都是user一进页面就要取seq.nextval 埋在背景 01/08 21:25
11F:→ BlueBird5566: user送出资料就把这seq一起送出 insert到table 01/08 21:26
12F:→ BlueBird5566: 就是号码牌的概念 这样不会重复取号 但容易跳号 01/08 21:26
13F:→ BlueBird5566: 但是用oracle要不跳号也很难就是了 01/08 21:26
14F:→ flowwinds: 用个table存流水号,结构(表流水号,目前流水号,时间) 01/10 21:33
15F:→ flowwinds: 资料是像这样(1,12,'150108'),每次取号用update table 01/10 21:34
16F:→ flowwinds: set 目前流水号=目前就水号+1 where 时间='150108' 01/10 21:35
17F:→ flowwinds: returning 目前流水号; 01/10 21:35
18F:→ flowwinds: 流水号表的record可以一次生成一年份, 365/366笔 01/10 21:36
19F:→ flowwinds: 取号则是在insert前, 可以是另一个独立的transaction 01/10 21:37
20F:→ flowwinds: 基本上类似楼上大大的方法.. 01/10 21:39