使用Oracle存储过程批量生成测试数据
使用Oracle存储过程批量生成测试数据
北风其凉 发表于2年前
使用Oracle存储过程批量生成测试数据
  • 发表于 2年前
  • 阅读 298
  • 收藏 4
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 使用Oracle存储过程批量生成测试数据

在做性能测试等场景时需要生成大量的仿真数据,使用存储过程可以快速解决此问题。

我的数据库版本为Oracle11g,PL/SQL版本为7.0.1.1066,操作系统版本为Win7旗舰版。

首先有一个表player_info结构如下:

-- 创建表 PLAYER_INFO
CREATE TABLE PLAYER_INFO
(
    player_id number(12, 0) PRIMARY KEY,
    player_name varchar2(20) NOT NULL,
    oper_mark number(12, 0),
    input_date number(10,0) DEFAULT to_number(to_char(sysdate,'yyyymmdd')),
    input_time number(10,0) DEFAULT to_number(to_char(sysdate,'hh24miss')),
);

-- 创建序列 SEQ_PLAYER_INFO
CREATE SEQUENCE SEQ_PLAYER_INFO
INCREMENT BY 1
START WITH 1
MAXVALUE 999999999999999999999999999
CYCLE 
CACHE 20 ;

这个表一共有5列:player_id(玩家标识)、player_name(玩家名称)、oper_mark(操作分数)、input_date(插入日期)、input_time(插入时间)。

在插入测试数据的时候,数据的来源可能有以下四种:

1、使用SEQUENSE或从其他PROCUDURE或FUNCTION中获取的值插入(如player_id)

2、使用测试人员制定的值插入(如player_name)

3、使用随机数生成器生成并插入(如出)

4、使用默认值(如input_date和input_time)

我们在制造测试数据的时候,应支持对这四类数据的生成。下面的存储过程gen_player_info_for_test解决了这一问题:

CREATE OR REPLACE PROCEDURE gen_player_info_for_test(
       p_player_name       VARCHAR2,      -- 玩家名称
       p_gen_count         NUMBER,        -- 生成条目数
       p_error_no          OUT NUMBER,    -- 错误号
       p_error_info        OUT VARCHAR2,  -- 错误提示
       p_error_id          OUT NUMBER,    -- 错误序号
       p_error_sysinfo     OUT VARCHAR2   -- 系统错误信息
       ) AS
  
  p_curr_value NUMBER := 0;
  p_end_value NUMBER := 0;
  
BEGIN
  dbms_output.put_line('----------- PROCUDURE START -----------');
  
  p_curr_value := 0;
  p_end_value := p_gen_count;
  WHILE p_curr_value < p_end_value
  LOOP 
      p_curr_value := p_curr_value + 1;

      INSERT INTO player_info
          (player_id,
           player_name,
           oper_mark)
      VALUES
          (seq_player_info.nextval,
           p_player_name,
           60 + abs(mod(dbms_random.random, 40)));
  
  END LOOP;
  
  dbms_output.put_line('----------- PROCUDURE END -----------');
  p_error_no      := 0;
  p_error_info    := 'EXECUTE SUCCESS';
  p_error_id      := SQLCODE;
  p_error_sysinfo := SQLERRM;
EXCEPTION
  WHEN OTHERS THEN
    p_error_no      := 999;
    p_error_info    := '存储过程执行错误';
    p_error_id      := SQLCODE;
    p_error_sysinfo := SQLERRM;
END gen_player_info_for_test;
/

第一类数据player_id用Sequence的NextVal加入,第二类数据player_name通过参数传入存储过程并插入,第三类数据player_name通过dbms_random.random生成并加工后插入,第四类数据input_date和input_time不用处理,直接使用DEFAULT值即可。

使用此存储过程时,只需要先在命令窗口中执行此存储过程,执行后就可以在PL/SQL内浏览器中的Procedures目录下找到这个存储过程了,用鼠标右键单击新加入的存储过程(gen_player_info_for_test)并进入“测试”(Test)窗口,设定输入的变量,点击“开始调试器(F9)”即可执行此存储过程。

注意执行完毕后不要忘记按“提交”按钮。

END

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
北风其凉
粉丝 114
博文 493
码字总数 462457
作品 4
×
北风其凉
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: