又是一個快下班的時候,工作緊張有序的進行着。現場反饋了一個問題,數據大於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