想建一个序列,要求取系统当前的年月日,后加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.........依此类推!
请问哪位高手能给出此序列的详细代码???????????????????????

解决方案 »

  1.   

    使用触发器先把当前日期转化为了'YYYYMMDD'
    查出表中当天最大值后每次加一MAX(C)+1
    然后把'YYYYMMDD'||'_'|| MAX(C)+1
      

  2.   

    创建个触发器,是行级的即一个seqno
    在插入一行是,用select to_char(trunc(sysdate),'yyyymmdd')||'_'||seqno.nextval from dual
    替换你所要指定的列值
      

  3.   

    难,建议用其它方法处理.
    其实你只是希望这个序列不但能做唯一键. 而且能代表是什么时候产生的.
    我建议你用其它方法实际..或者用以下方法:
    在需要取序列值前, 先调用存储过程之类的东东. 
    来检查当前的序列有无存在. 如果不存在,就新建. 并且将过日的序列清除掉.或者写一个task. 在每天晚上23:00执行生成第二天的序列..
      

  4.   

    谁能评价一下zyeii的说法????????????????
      

  5.   

    我觉得kingkingkingking(南极飘雪) 说的对,干吗非要序列啊。
    用函数,
    取当前日期和上个日期比较,如果一样,则取后四位最大+1,如果不一样,则当前日期+0001
      

  6.   

    to jdsnhan(柳荫凉):
    如果这么做的话,就不能支持并发操作了,因为并发操作会插入相同的编码
      

  7.   

    在zyeii()上改一点点
    建个序列 seqno
    select to_char(trunc(sysdate),'yyyymmdd')||'_'||ltrim(to_char(seqno.nextval,'0000')) from dual;
      

  8.   

    select to_char(trunc(sysdate),'yyyymmdd')||'_'||ltrim(to_char(seqno.nextval,'0000')) from dual;ltrim(to_char(seqno.nextval,'0000')这部分有点问题吧,楼主是想实现一个序号,可是如果seqno.nextval是大于四位的.那就有问题了吧
      

  9.   

    建议用函数生成序列号
    select f(sysdate)
    生成4位数的操作可以也可以用lpad来实现
    lpad(1,4,'0')='0001'
    lpad(2,4,'0')='0002'
    lpad(3,4,'0')='0003'
      

  10.   

    OracleDBA群35903017,欢迎加入。
      

  11.   

    把你的 系列 建成这样
    to_char(sysdate,'yyyymmdd')|| 系列.nextvarl
    哈哈 应该编辑不通过 我没测试