利用存儲過程批量生成數據


     又是一個快下班的時候,工作緊張有序的進行着。現場反饋了一個問題,數據大於2000條的時候,導出excel報錯,導出格式是每20條數據一個sheet的格式。如圖:

     如何來模擬這么多數據來進行驗證呢?公司環境沒有那么多數據,並且很多業務表都有關聯,要是手工添加數據那是不現實的,若是利用自動化工具QTP來實現一是需要寫很長的自動化腳本才能實現,並且跑腳本也需要很長時間,再者馬上就要下班了,時間緊迫,容不得浪費一丁點時間,需要采取高效的方式來實現。這時就想到了后台進行插數據,利用存儲過程循環來生成數據,這樣就會大為節省時間。

     調用存儲過程腳本如下:

DECLARE
  OUT_RETURN_CODE VARCHAR2(1000);
  OUT_RETURN_MSG  VARCHAR2(1000);
  OUT_CODE        NUMBER;
  OUT_MSG         VARCHAR2(1000);
  I               INT;
BEGIN
  -- Call the procedure  
  FOR I IN 1 .. 2001 LOOP
    ECMS.PKG_BILLING_SHANDONGCHARGE.P_INSERT_ELEC('334010101',
                                                  '魯AK4701',
                                                  '10000030',
                                                  '1',
                                                  TO_DATE('2013-3-7 7:00:00',
                                                          'YYYY-MM-DD HH24:MI:SS') +
                                                  0.001 * I,
                                                  TO_DATE('2013-3-7 7:10:00',
                                                          'YYYY-MM-DD HH24:MI:SS') +
                                                  0.001 * I,
                                                  'YYY',
                                                  'YYY',
                                                  '01',
                                                  I + 1,
                                                  OUT_RETURN_CODE,
                                                  OUT_RETURN_MSG,
                                                  OUT_CODE,
                                                  OUT_MSG);  
  END LOOP;
  COMMIT;
END;

     由於業務對時間及里程有校驗,需大於上次,所以在循環的時候對這些數據進行了'+'`操作,以便滿足業務要求。
     對於2000多條數據,執行這腳本幾秒鍾就好了,數據好了,驗證現場情況就很便捷了。

附:生成數據的校驗:

SELECT R.*, ROWNUM ROW_NO
  FROM (SELECT T.MANUAL_MEASURE_ID COLLDATAID,
               TO_CHAR(T.ELECTRICITY, '999990.999') CHARGECAPACITY,
               T.CUST_NO CUSTNO,
               (SELECT O.ORG_NAME FROM O_ORG O WHERE T.SP_ORG_NO = O.ORG_NO) ENERGY_ORG_NO,
               T.LICENSE_NO LICENSENO,
               T.RATABLE_EVENT_ID RATABLE_EVENT_ID,
               TO_CHAR(T.START_TIME, 'yyyy-mm-dd hh24:mi:ss') STARTTIME,
               TO_CHAR(T.END_TIME, 'yyyy-mm-dd hh24:mi:ss') ENDTIME,
               T.STAKE_NO STAKE_NO,
               (SELECT O.ORG_NAME FROM O_ORG O WHERE T.ORG_NO = O.ORG_NO) CUSTORGNO,
               T.DRIVER DRIVER,
               T.STATION_STAFF STATION_STAFF,
               DECODE(T.MEASURE_TYPE, '01', '充電', '02', '換電') MEASURE_TYPE,
               T.MILEAGE_CONSUME TRAVELMILEAGE,
               T.CHECKOUT_FLAG MEASURE_MARK,
               DECODE(T.CHECKOUT_FLAG, '01', '未計費', '02', '已計費') CHECKOUT_FLAG
          FROM E_MANUAL_MEASURE T
         WHERE T.LICENSE_NO = '魯AK4701'
         ORDER BY T.START_TIME DESC, T.END_TIME DESC) R

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM