现在的位置: 首页 > 综合 > 正文

利用存储过程批量生成数据

2013年05月05日 ⁄ 综合 ⁄ 共 1570字 ⁄ 字号 评论关闭

     又是一个快下班的时候,工作紧张有序的进行着。现场反馈了一个问题,数据大于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

 

抱歉!评论已关闭.