作者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/m.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