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

看板java作者 (老子我最神)時間8年前 (2016/01/06 22:49), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/5 (看更多)
※ 引述《u9423504 (緣投農夫)》之銘言: : 標題: [問題] 關於資料庫流水號的問題 : 時間: 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。 : : 不知是否有更好的方法呢?! : 看情況 ---------------------------- 如果是寫作業的話 在單隻程式要在資料庫做出預期結果才能得分 那用你的方法就可以了 (或是直接設定幾個變數在程式處理而不需要 access DB) ----------------------------- 如果作業有點困難,可能有 multi thread 那可能要加一些 Thread-safe 的東西 例如在要執行 "查詢並新增" 的方法上加上 synchronized ----------------------------- 如果作業又更困難一點,可能有多台機器同時運作 可以用 swpoker 或 ssccg 的方法 不過要額外考慮 error handling, 不過你因為需求沒提錯誤狀況,所以就不說明 error handling 要做甚麼 ------------------------------- 如果不是作業,而是客戶或老闆的需求 (客戶要的報表內容) 我建議直接用一般流水號當 pk,並且有一個欄位是紀錄日期 在產報表時在呈現給用戶或老闆想看得樣子即可 或是直接用 view table 呈現 這樣開發功能時間最短 (不用處理過多技術問題) 也可以讓報表與 DB 脫鉤 (鬆耦合) 未來若報表欄位異動也比較好處理 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.183.100.11 : ※ 文章網址: https://www.ptt.cc/bbs/java/M.1452013210.A.B5E.html : 推 swpoker: sequence? 01/06 02:14 : → swpoker: 這樣會重複,或用某參數表用for update 01/06 02:16 : 推 now99: 時間要到秒 01/06 07:08 : → ssccg: 就當天的日期加一個sequence不就好了? sequence每天reset 01/06 09:27 : 推 mrforget: create sequence [sequence_name] start with 1 01/06 18:51 : → mrforget: increment by 1 ; 01/06 18:51 : → mrforget: sequence_name.nextval 01/06 18:52 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.133 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1452091748.A.85C.html
文章代碼(AID): #1MZIbaXS (java)
討論串 (同標題文章)
文章代碼(AID): #1MZIbaXS (java)