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

作者: u9423504 (緣投農夫)   2016-01-06 01:00:04
各位前輩好:
小弟使用的資料庫是Oracle。想請教各位,如何產生以當天日期為主的流水號,而且
日期每過一天,流水號的編號就從01開始編起。例如:15121301、15121302
、15121303、15121401、15121402等。其中,『15』表示是西元2015年。
其流水號格式為:yymmdd+2碼的流水號。而且要避免線上多人同時Insert資料時產生
重覆的編號。且該流水號的資料欄位格式是Varchar。
小弟目前想到的方法是:以當天的日期加上like 和 count 去做 select,若都沒有找到
則日期補上01;若有找到,則日期前加上
count回傳的筆數+1。
不知是否有更好的方法呢?!
作者: swpoker (swpoker)   2016-01-06 02:14:00
sequence?這樣會重複,或用某參數表用for update
作者: now99 (陳在天)   2016-01-06 07:08:00
時間要到秒
作者: ssccg (23)   2016-01-06 09:27:00
就當天的日期加一個sequence不就好了? sequence每天reset
作者: mrforget (財去人安樂)   2016-01-06 18:51:00
create sequence [sequence_name] start with 1increment by 1 ;sequence_name.nextval
作者: Lordaeron (Terry)   2016-01-06 23:45:00
作個TABLE 負責SEQUENCE, 再用SELECT FOR UPDATE 來鎖.
作者: BlueBird5566 (生日56)   2016-01-08 21:24:00
因為不確定你的是什麼系統 使用者輸入什麼資料但通常都是user一進頁面就要取seq.nextval 埋在背景user送出資料就把這seq一起送出 insert到table就是號碼牌的概念 這樣不會重複取號 但容易跳號但是用oracle要不跳號也很難就是了
作者: flowwinds (..)   2016-01-10 21:33:00
用個table存流水號,結構(表流水號,目前流水號,時間)資料是像這樣(1,12,'150108'),每次取號用update tableset 目前流水號=目前就水號+1 where 時間='150108'returning 目前流水號;流水號表的record可以一次生成一年份, 365/366筆取號則是在insert前, 可以是另一個獨立的transaction基本上類似樓上大大的方法..

Links booklink

Contact Us: admin [ a t ] ucptt.com