[問題] 關於資料庫流水號的問題

看板java作者 (緣投農夫)時間9年前 (2016/01/06 01:00), 編輯推噓3(3017)
留言20則, 7人參與, 最新討論串1/5 (看更多)
各位前輩好: 小弟使用的資料庫是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://www.ptt.cc/bbs/java/M.1452013210.A.B5E.html

01/06 02:14, , 1F
sequence?
01/06 02:14, 1F

01/06 02:16, , 2F
這樣會重複,或用某參數表用for update
01/06 02:16, 2F

01/06 07:08, , 3F
時間要到秒
01/06 07:08, 3F

01/06 09:27, , 4F
就當天的日期加一個sequence不就好了? sequence每天reset
01/06 09:27, 4F

01/06 18:51, , 5F
create sequence [sequence_name] start with 1
01/06 18:51, 5F

01/06 18:51, , 6F
increment by 1 ;
01/06 18:51, 6F

01/06 18:52, , 7F
sequence_name.nextval
01/06 18:52, 7F

01/06 23:45, , 8F
作個TABLE 負責SEQUENCE, 再用SELECT FOR UPDATE 來鎖.
01/06 23:45, 8F

01/08 21:24, , 9F
因為不確定你的是什麼系統 使用者輸入什麼資料
01/08 21:24, 9F

01/08 21:25, , 10F
但通常都是user一進頁面就要取seq.nextval 埋在背景
01/08 21:25, 10F

01/08 21:26, , 11F
user送出資料就把這seq一起送出 insert到table
01/08 21:26, 11F

01/08 21:26, , 12F
就是號碼牌的概念 這樣不會重複取號 但容易跳號
01/08 21:26, 12F

01/08 21:26, , 13F
但是用oracle要不跳號也很難就是了
01/08 21:26, 13F

01/10 21:33, , 14F
用個table存流水號,結構(表流水號,目前流水號,時間)
01/10 21:33, 14F

01/10 21:34, , 15F
資料是像這樣(1,12,'150108'),每次取號用update table
01/10 21:34, 15F

01/10 21:35, , 16F
set 目前流水號=目前就水號+1 where 時間='150108'
01/10 21:35, 16F

01/10 21:35, , 17F
returning 目前流水號;
01/10 21:35, 17F

01/10 21:36, , 18F
流水號表的record可以一次生成一年份, 365/366筆
01/10 21:36, 18F

01/10 21:37, , 19F
取號則是在insert前, 可以是另一個獨立的transaction
01/10 21:37, 19F

01/10 21:39, , 20F
基本上類似樓上大大的方法..
01/10 21:39, 20F
文章代碼(AID): #1MY_QQjU (java)
文章代碼(AID): #1MY_QQjU (java)