看板 java 關於我們 聯絡資訊
分享自己的流水號的方式 資料庫: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