作者cyclone350 (老子我最神)
看板java
标题Re: [问题] 关於资料库流水号的问题
时间Wed Jan 6 22:49:06 2016
※ 引述《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://webptt.com/cn.aspx?n=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://webptt.com/cn.aspx?n=bbs/java/M.1452091748.A.85C.html