Re: [問題] 關於資料庫流水號的問題
※ 引述《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
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章