用sequence 的话只有自增列
我要的是
如:Q20082110001,Q20082110002....
过了一天后:Q20082120001,Q20082120002....
如何实现?难道要每天0点运行一个JOB?重置序列?还有没有更好的办法,大家是什么实现的?

解决方案 »

  1.   

    我可能会建立很多很多个sequence,按照日期,每个月底,生成一次,下个月用的。
    名字就用日期。
      

  2.   

    我认为这样子可以实现,假设你的自增列名是id,可以通过触发器来实现
    select max(id) into:自增序号变量 from 表名 where 以当天作为条件;
    然后把触发器置为insert的before条件下插入变量值
      

  3.   

    赫赫,用MAX的做法,就是一定要考虑并发的情况。
      

  4.   

    select cancat(to_cahr(sydate,'yyyymmdd'), seqence.nextval) from dual;
      

  5.   

    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
      

  6.   

    Q20082110001我想,大概可以用3部分組成吧?即,Q+2008211+0001。
    那就寫一個loop就可以了吧?
      

  7.   

    如果是以前,我肯定会采用3楼的方法,用触发器,外加max()+1的方法. 不过现在看来此方案只是在开发阶段, 单用户使用时OK. 如果多用户并发时, 问题可就多了. 在ORACLE中用SEQUENCE可以保证不产生重复序号的办法, 更能适应多用户并发的要求. 楼主自己的建议也许是最简便可靠的. 这样你在应用程序中就可以直接使用静态 'Q'||TO_CHAR(SYSDATE,'RRRRMMDD')||LPAD(SEQ.NEXTVAL,5,'0')了.