想建一个序列,要求取系统当前的年月日,后加0001,0002,0003,0004这样。
比如,如果现在的时间是2006年12月7日,那么这天的序列就为20061207_0001,
20061207_0002,20061207_0003,20061207_0004........如果现须的时间是2006rh 12月8日,那么这天的序列就为20061208_0001,
20061208_0002,20061208_0003,20061208_0004,20061208_0005.........依此类推!
请问哪位高手能给出此序列的详细代码???????????????????????
比如,如果现在的时间是2006年12月7日,那么这天的序列就为20061207_0001,
20061207_0002,20061207_0003,20061207_0004........如果现须的时间是2006rh 12月8日,那么这天的序列就为20061208_0001,
20061208_0002,20061208_0003,20061208_0004,20061208_0005.........依此类推!
请问哪位高手能给出此序列的详细代码???????????????????????
查出表中当天最大值后每次加一MAX(C)+1
然后把'YYYYMMDD'||'_'|| MAX(C)+1
在插入一行是,用select to_char(trunc(sysdate),'yyyymmdd')||'_'||seqno.nextval from dual
替换你所要指定的列值
其实你只是希望这个序列不但能做唯一键. 而且能代表是什么时候产生的.
我建议你用其它方法实际..或者用以下方法:
在需要取序列值前, 先调用存储过程之类的东东.
来检查当前的序列有无存在. 如果不存在,就新建. 并且将过日的序列清除掉.或者写一个task. 在每天晚上23:00执行生成第二天的序列..
用函数,
取当前日期和上个日期比较,如果一样,则取后四位最大+1,如果不一样,则当前日期+0001
如果这么做的话,就不能支持并发操作了,因为并发操作会插入相同的编码
建个序列 seqno
select to_char(trunc(sysdate),'yyyymmdd')||'_'||ltrim(to_char(seqno.nextval,'0000')) from dual;
select f(sysdate)
生成4位数的操作可以也可以用lpad来实现
lpad(1,4,'0')='0001'
lpad(2,4,'0')='0002'
lpad(3,4,'0')='0003'
to_char(sysdate,'yyyymmdd')|| 系列.nextvarl
哈哈 应该编辑不通过 我没测试