社区
Oracle
帖子详情
日期+流水号 100分
肥胖的柠檬
2008-02-17 02:40:54
用sequence 的话只有自增列
我要的是
如:Q20082110001,Q20082110002....
过了一天后:Q20082120001,Q20082120002....
如何实现?
难道要每天0点运行一个JOB?重置序列?
还有没有更好的办法,大家是什么实现的?
...全文
321
13
打赏
收藏
日期+流水号 100分
用sequence 的话只有自增列 我要的是 如:Q20082110001,Q20082110002.... 过了一天后:Q20082120001,Q20082120002.... 如何实现? 难道要每天0点运行一个JOB?重置序列? 还有没有更好的办法,大家是什么实现的?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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,按照日期,每个月底,生成一次,下个月用的。
名字就用日期。
流水号
、
日期
、条形码与二维码的变量设置详解
码尚云标签打印软件面向新用户设计标签的进阶教程
asp.net mvc +EF 实现每日
日期
+六位
流水号
自增
//asp.net mvc 实现每日
日期
+六位
流水号
自增的思路 //先求出表中的记录编号的数量, //1。如果表中记录编号的数量为0,那么将要产生的记录编号是今日的第一个记录编号,今日
日期
+000001; //2。否则,(也就是记录编号的数量不为0时) //2.1,获取现在表中最大记录编号的
日期
是否与今日
日期
相等 //...
如何根据
日期
+数字生成
流水号
生成
流水号
,在企业中可以说是比较常见的需求,尤其是订单类业务。 一般来说,需要保证
流水号
的唯一性。 如果没有长度和字符的限制,那么直接使用UUID生成一个唯一字符串即可,具体可参考我的这篇文章:java生成类似token的唯一随机字符串 也可以直接使用数据库表中的主键,主键就是唯一的。 那么,如果限制了
流水号
必须多少位,这种怎么生成呢? 可以采用"前缀+
日期
+数字"的方式(ps:此方式是需要用到缓存的) 前缀:为了更好的标识这个
流水号
是属于哪种类型;
日期
:为了防止重复; 数字:为了表示当前的流水所处序号。
根据
日期
+顺序号生成
流水号
的存储过程
前几天做一个项目,要求能按
日期
+顺序号生成
流水号
,查看网上相关方法发现都差不多,但是没有完整的编码,被逼无赖,自己做一个,顶一顶也用起来了.本存储过程在sql server 2000下测试通过:CREATE PROCEDURE [dbo].[CreatePcdID] (@PcdID char(20) output--输出派车单号)ASdeclare @result int --当天派车
oracle
流水号
(
日期
)
在网上找了一下,没有,那就自己写一个了,刚换一公司,刚学习oracle,请大家见笑.可能用MSSQL多了,从编程来说感觉还没有MSSQL方便.用MSSQL下面就是一个函数.如果大家有好的方法,清说说:--添加sequence drop sequence EXAMPLE_SEQcreate sequence EXAMPLE_SEQincrement by 1start with 0minv
Oracle
17,133
社区成员
55,258
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章