当天执行一个存储过程,每次执行一次该存储过程返回值为:
00,
01,
02,
...
如果明天在执行该存储过程,返回值又是:
00,
01,
02,
...
请问该怎么写这个存储过程?

解决方案 »

  1.   

    可以创建一个表:
    ID    Tvalue    Tdate
    1     90       20080808
    2     00       20080828每次取Tdate最大的一条记录与系统时间比较,是同一天则取Tvalue值,然后更新Tvalue。否则,插入一条Tvalue为00,Tdate为当天的新记录。取Tdate最大的一条记录可以这么取:select Tvalue from 
    (
    select * from Ttable
    order by Tdate desc
    )
    where rownum = 1
      

  2.   


    CREATE TABLE T_SEQ(A DATE);--建个表判断是否是新的一天
    CREATE OR REPLACE PROCEDURE GET_SEQ(P_OUT OUT VARCHAR2) IS L_S1 VARCHAR2(10);
    L_I1 INT;
    BEGIN
      SELECT COUNT(*) INTO L_I1 FROM T_SEQ;
      IF L_S1 = 0 THEN
        BEGIN
          EXECUTE IMMEDIATE 'create sequence seq_1';
        EXCEPTION
          WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(SQLERRM);
        END;
        INSERT INTO T_SEQ VALUES (SYSDATE);
        COMMIT;
        SELECT lpad(SEQ_1.NEXTVAL,2,'0') INTO P_OUT FROM DUAL;
      ELSE
        SELECT TO_CHAR(A, 'yyyy-mm-dd') INTO L_S1 FROM T_SEQ;
        IF L_S1 = TO_CHAR(SYSDATE, 'yyyy-mm-dd') THEN
          SELECT lpad(SEQ_1.NEXTVAL,2,'0') INTO P_OUT FROM DUAL;
        ELSE
          DELETE FROM T_SEQ;
          INSERT INTO T_SEQ VALUES (SYSDATE);
          COMMIT;
          BEGIN
            EXECUTE IMMEDIATE 'drop sequence seq_1';
            EXECUTE IMMEDIATE 'create sequence seq_1';
          EXCEPTION
            WHEN OTHERS THEN
              DBMS_OUTPUT.PUT_LINE(SQLERRM);
          END;
          SELECT lpad(SEQ_1.NEXTVAL,2,'0') INTO P_OUT FROM DUAL;
        END IF;
      END IF;
    END GET_SEQ;
    /--测试
    DECLARE L_V VARCHAR2(10);
    BEGIN
      GET_SEQ(L_V);
      DBMS_OUTPUT.PUT_LINE(L_V);
    END;
    /
      

  3.   

    或者想办法记录下日期,每天删除并重新创建SEQUENCE。
    创建SEQUENCE
    DROP SEQUENCE AT2;CREATE SEQUENCE AT2
      START WITH 0
      MAXVALUE 99
      MINVALUE 0
      CYCLE
      CACHE 20
      NOORDER;返回的值:
    select lpad(at2.nextval,2,'0') from dual
      

  4.   

    呵呵 oracledbalgtu动作还挺快的。^_^
      

  5.   

    http://fronkx.blog.hexun.com/12407600_d.html