文档章节

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

北风其凉
 北风其凉
发布于 2016/06/16 17:29
字数 619
阅读 311
收藏 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

© 著作权归作者所有

共有 人打赏支持
北风其凉

北风其凉

粉丝 114
博文 497
码字总数 462457
作品 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
j2ee调用Oracle带数组参数和游标的存储过程方法

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

逸风如梦
2013/01/17
0
0
mysql批量插入500条数据

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

am2012
2017/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
11分钟前
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
45分钟前
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
0
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
2
0
设计模式之五 责任链模式(Chain of Responsibility)

一. 场景 相信我们都有过这样的经历; 我们去职能部门办理一个事情,先去了A部门,到了地方被告知这件事情由B部门处理; 当我们到了B部门的时候,又被告知这件事情已经移交给了C部门处理; ...

JackieRiver
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部