日期+流水号 100分

肥胖的柠檬 2008-02-17 02:40:54
用sequence 的话只有自增列
我要的是
如:Q20082110001,Q20082110002....
过了一天后:Q20082120001,Q20082120002....
如何实现?

难道要每天0点运行一个JOB?重置序列?

还有没有更好的办法,大家是什么实现的?
...全文
245 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanjun132 2008-02-20
  • 打赏
  • 举报
回复
同意楼上的
wshy0772 2008-02-20
  • 打赏
  • 举报
回复
SELECT Max(ID)ID+1 FROM dual WHERE TO_Char(SYSDATE,'YYYYMMDD')=Copy(ID,2,9)
既然你这是编码字段就不要弄成ID,再建个ID把这个字段分出来吧,可以每次插入时求一下这个值
如果要批量插入的时候就把Max(ID)ID+1换成Max(ID)ID+RowNum
Kurt2008 2008-02-20
  • 打赏
  • 举报
回复
如果是以前,我肯定会采用3楼的方法,用触发器,外加max()+1的方法. 不过现在看来此方案只是在开发阶段, 单用户使用时OK. 如果多用户并发时, 问题可就多了.

在ORACLE中用SEQUENCE可以保证不产生重复序号的办法, 更能适应多用户并发的要求. 楼主自己的建议也许是最简便可靠的. 这样你在应用程序中就可以直接使用静态 'Q'||TO_CHAR(SYSDATE,'RRRRMMDD')||LPAD(SEQ.NEXTVAL,5,'0')了.
fazzamilan 2008-02-20
  • 打赏
  • 举报
回复
Q20082110001我想,大概可以用3部分組成吧?即,Q+2008211+0001。
那就寫一個loop就可以了吧?
onefours 2008-02-19
  • 打赏
  • 举报
回复
select cancat(to_cahr(sydate,'yyyymmdd'), seqence.nextval) from dual;
阿三 2008-02-18
  • 打赏
  • 举报
回复
写一个存储过程,在需要生成流水号时,就调用它生成一个,这样还能用事务进行控制,保证数据的完整性。
HelloWorld_001 2008-02-18
  • 打赏
  • 举报
回复
我用过的就是3楼的做发,可以实现
肥胖的柠檬 2008-02-17
  • 打赏
  • 举报
回复
用触发器,也要用用序列吧
Croatia 2008-02-17
  • 打赏
  • 举报
回复
赫赫,用MAX的做法,就是一定要考虑并发的情况。
wffffc 2008-02-17
  • 打赏
  • 举报
回复
不用序列,用触发器
JiansLovePb 2008-02-17
  • 打赏
  • 举报
回复
我认为这样子可以实现,假设你的自增列名是id,可以通过触发器来实现
select max(id) into:自增序号变量 from 表名 where 以当天作为条件;
然后把触发器置为insert的before条件下插入变量值
Croatia 2008-02-17
  • 打赏
  • 举报
回复
当然,之前的都不要了的话,就同时清空之前的。删除掉。
Croatia 2008-02-17
  • 打赏
  • 举报
回复
我可能会建立很多很多个sequence,按照日期,每个月底,生成一次,下个月用的。
名字就用日期。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧