Re: [問題] 關於資料庫流水號的問題
分享自己的流水號的方式
資料庫:oracle
流水號=時間+流水號
1.建置系統前
建立流水號表格或sequence(我是用流水號表格的方式)
並建立第一筆資料
2.系統執行時,利用SQL查詢
----獨立交易開始
select seq,min,max,sysdate from 流水號設定檔 for update
首先獲得seq,及sysdate
然後先回寫下一個seq
seq= (++seq) > max ? min : seq;
update回去
commit
---獨立交易結束
4.將獲得seq及sysdate,變成流水號
例如
format(sysdate,'yyyyMMddHHmmsss')+seq
或是
直接getTime()+seq
都可以
*.重號的條件為在時間的規則下,超過max的要求
例如format(sysdate,'yyyyMMdd'),max為10
則每天的取號超過10的話,就會重複
*.此取號的字串的長度幾乎是有限制的
*.我自己是為了限制長度
例如 時間規則到秒,max=100000,根據自己寫的公式
則流水號為 1F5sfd8001467 , 永遠固定13碼
如一秒超過100000的取號,則會重複
提供給你參考
※ 引述《SHANGOYANYI (彥一)》之銘言:
: ※ 引述《u9423504 (緣投農夫)》之銘言:
: : 各位前輩好:
: : 小弟使用的資料庫是Oracle。想請教各位,如何產生以當天日期為主的流水號,而且
: : 日期每過一天,流水號的編號就從01開始編起。例如:15121301、15121302
: : 、15121303、15121401、15121402等。其中,『15』表示是西元2015年。
: : 其流水號格式為:yymmdd+2碼的流水號。而且要避免線上多人同時Insert資料時產生
: : 重覆的編號。且該流水號的資料欄位格式是Varchar。
: : 小弟目前想到的方法是:以當天的日期加上like 和 count 去做 select,若都沒有找
: 到
: : 則日期補上01;若有找到,則日期前加上
: : count回傳的筆數+1。
: : 不知是否有更好的方法呢?!
: 這題把日期跟流水號分兩欄存就很好做了
: 建一個before insert trigger自動去找當天日期的流水號欄位max值 +1 設為new value
: 再加個date+seq的unique條件即可~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.54.155
※ 文章網址: https://www.ptt.cc/bbs/java/M.1452669978.A.5B0.html
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章