文档章节

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

北风其凉
 北风其凉
发布于 2016/06/16 17:29
字数 619
阅读 318
收藏 4

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

我的数据库版本为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

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 115
博文 498
码字总数 463468
作品 4
朝阳
程序员
POSTGRESQL存储过程的问题

在POSTGRESQL中写存储过程,感觉几个问题 1)定义类型 不能像ORACLE那样,直接就可以在存储过程中定义,非要预先在存储过程外定义好类型,才能使用,比较麻烦,缺乏灵活性,因为很多类型,只是...

tony_trh
2014/01/09
1K
1
CYQ.DBImport 数据库反向工程及批量导数据库工具 V1.0 发布

[Tip:2011-05-19 14:55左右修正个别Bug后重新上传了一下,之前下载的新重新下载。] 杂七几句: 自从购买VPS之后,打算将 秋色园QBlog 搬迁,也想把目前的Access数据库换成其它数据库。 由于...

晨曦之光
2012/03/09
0
0
oracle常用小技巧

■对象列表 ① 从对象列表中更改表名称 以前要修改表名称时我们还要通过SQL语句修改,现在通过ObjectBrowser的图形化界面我们很容易就可 以做到,只需要选中要修改的对象,点击左键你就可以在输...

海尼
2013/09/02
970
0
mysql批量插入500条数据

表格结构如下 需求name和password字段,生成如下格式: 总共批量生成500个。 解决思路: 可以用mysql 存储过程 如果linux环境下可以用shell 我们先测试第一种,用存储过程。 DELIMITER ;; #...

am2012
2017/08/12
0
0
j2ee调用Oracle带数组参数和游标的存储过程方法

环境:Oracle 10g; jboss4.2.2;jdk1.6;hibernate 3.2 需求:有一个数据量比较大的表tableA,大概有几十万数据。里面存放用户手机号码,现在要求批量保存至少几百的的手机号码,保存之前需要分...

逸风如梦
2013/01/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

android -------- MVP+DataBinding 的使用

天来说说MVP+DataBinding 的使用 以一个登录案例来讲解 布局:(ConstraintLayout 作为根布局) <layout> <data> <variable name="onClick" ......

切切歆语
37分钟前
1
0
阿里十年Java架构经验总结,这几点尤为重要!

你有没有静下心来思考过:同样是做了x年Java开发,为什么你的技术比别人差很多?为什么别人每月28K你却只有10K? 其实技术水平的高低和个人智商关系不大(毕竟能做Java编程开发大家都不会差)...

别打我会飞
41分钟前
1
0
Ubuntu 中安装和配置 Caddy 服务

首先访问:https://caddyserver.com/download 选择操作系统、插件和授权类型,点击 Download 下载编译好的文件包,或者执行页面最下面的一键安装脚本,完成 caddy 的安装。 安装完成后,/us...

八风不动
56分钟前
2
0
java代码效率优化

1、 尽量指定类的final修饰符 带有final修饰符的类是不可派生的。 2、 尽量重用对象。 3、 尽量使用局部变量,调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较...

踏破铁鞋无觅处
今天
3
0
程序员的几款利器

1. 作为程序员,最希望的就是自己的代码能够在一个云平台上保留下来,gitlab等等这些很多。但是我这里推荐“码云平台”码云平台和开源中国可以直接关联起来。开源中国可以记录博客,当然也是...

ChinaHYF
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部