现需创建一个这样的存诸过程
用查询出来的值作为条件,当值大于X时执行insert into语句, 当值小于X时10分后再重新执行查询语句或结束。
麻烦高手指点

解决方案 »

  1.   


    -- 根据你给的需求:
    CREATE OR REPLACE PROCEDURE SP_TEST_XX_NEW IS
      COUNTS NUMBER;
      V_STEP VARCHAR2(100) := '';
    BEGIN
      V_STEP := 'GETTING SUM AMOUNT VALUE';
      SELECT COUNT(*)
        INTO COUNTS
        FROM C_T_CDMA_TRANSINFO
       WHERE TO_CHAR(INSERT_TIME, 'YYYYMMDDHH24MI') BETWEEN
             TO_CHAR(SYSDATE - 1 / 288, 'YYYYMMDDHH24MI') AND
             TO_CHAR(SYSDATE, 'YYYYMMDDHH24MI')
         AND FLAG_RESULT = 1;
       
      V_STEP := 'MATCHING DATA WITH XX'; 
      DBMS_OUTPUT.PUT_LINE('CURRENTLY DATE IS: '||SYSDATE);
      IF COUNTS > 100 THEN
        -- THE COUNT WHICH LARGER THAN 100
        INSERT INTO TKM.TRIPARTY_MT_MID (FID,FTOPID,FSRVCODE) VALUES (77,'DGDX','DX14') ;
        COMMIT;
      ELSE
        -- THE COUNT WHICH LESS THAN OR EQUAL TO 100
        DBMS_OUTPUT.PUT_LINE('CURRENTLY START DATE IS: '||SYSDATE);
          DBMS_LOCK.SLEEP(600);
          V_STEP := 'CALLING PROCEDURE AGAIN TO MATCH DATA WITH 100'; 
          EXECUTE IMMEDIATE 'CALL SP_TEST_XX_NEW';
        DBMS_OUTPUT.PUT_LINE('CURRENTLY END DATE IS: '||SYSDATE);
      END IF;EXCEPTION
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error at: '||V_STEP);
        DBMS_OUTPUT.PUT_LINE(SQLCODE || ' : '||SQLERRM);END ;
      

  2.   

    給個例子:
    DECLARE
      v_ss INT;
    BEGIN
      v_ss := to_number(to_char(SYSDATE,'ss'));--取得秒
      dbms_output.put_line(to_char(SYSDATE,'yyyymmddhh24miss'));
     IF v_ss <=30 THEN
        dbms_output.put_line('30秒之內');
     ELSE
        dbms_output.put_line('30秒之外');
        dbms_lock.sleep(10);--10秒鐘之後再執行
        dbms_output.put_line(to_char(SYSDATE,'yyyymmddhh24miss'));
     END IF;
    END ;
      

  3.   

    waitfor delay 
    能用到过程里嘛??