我有一个字段MSGID,格式:SJ+日期+三位流水码:
如20110928这天有两个,
MSGID分别为
SJ20110928001
SJ20110928002怎样可以实现阿不要用触发器,我的oracle帐号没有权限

解决方案 »

  1.   

    写一个sequence,更新字段或者插入字段时,用sequence拼串。
      

  2.   

    用触发器或者自定义function实现都比较简单,但是如果一定限制不能用的话可以试试下面的方式
    INSERT INTO table1
                (msgid
                )
         VALUES ((SELECT    'SJ'
                         || TO_CHAR (SYSDATE, 'yyyymmdd')
                         || LPAD (TO_NUMBER (SUBSTR (MAX (msgid), -3)) + 1, 3,
                                  '0')
                    FROM table1
                   WHERE msgid LIKE 'SJ' || TO_CHAR (SYSDATE, 'yyyymmdd') || '___')
                );
      

  3.   

    create sequence your_sq 
    start with n 
    increment by m
    maxvalue x
    minvalue y
    ......
      

  4.   


    我怎样让sequence 过了一天之后,又从n开始
      

  5.   

    sequence 何时重置为n阿〉??????
      

  6.   

    sequence不能设定何时重置,只有一个cycle/nocycle参数,达到最大值后是否重置.
    如果要每天重置的话sequence不合适
      

  7.   

    不得不再贴下这句SQL
    INSERT INTO table1
                (msgid
                )
         VALUES ((SELECT    'SJ'
                         || TO_CHAR (SYSDATE, 'yyyymmdd')
                         || LPAD (TO_NUMBER (SUBSTR (nvl(MAX (msgid),'000'), -3)) + 1, 3,
                                  '0')
                    FROM table1
                   WHERE msgid LIKE 'SJ' || TO_CHAR (SYSDATE, 'yyyymmdd') || '___')
                );