Oracle数据库开发测试中,通过存储过程可生成任意数量含随机日期、金额、性别的模拟数据;匿名块能批量创建结构相同的表,适用于分表或压力测试场景,有效提高测试数据准备效率,支持大数据量并发测试。
在日常开发与测试中,Oracle数据库经常需要快速填充一批模拟数据。下面分享两个非常实用的脚本:一个通过存储过程按需生成任意数量的随机记录,另一个则用匿名块批量创建结构相同的表。这两个方法在数据准备场景中堪称“利器”。
先来看第一个脚本。如果你想生成100条、1000条甚至更多测试数据,手写INSERT显然不现实。这个存储过程通过循环和序列,能灵活控制数据量,并且每条记录的日期、金额、性别字段都带有随机属性,非常贴近真实数据。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
/** *创建序列,用于获得特征数据*/create sequence mock_data_seqminvalue 1 start with 1 increment by 1 cache 100;/***创建数据库表*/create table tab_mock_data (id number,serno long,username varchar2(50),birthdate date,sex number(1),amount number(19,6),tag varchar2(20),remark varchar2(200),inputdate timestamp);/***创建存储过程*/create or replace procedure mockdatagenertator(maxrecords in number :=100) isi number :=1;beginfor i in 1..maxrecordsloop insert intotab_mock_data VALUES(mock_data_seq.NEXTVAL,i,'测试数据',SYSDATE-(i/24 i/24/3600), mod(i,3),dbms_random.random/10000,'std','备注',current_timestamp);end loop;commit;dbms_output.put_line(maxrecords||' insert done');end mockdatagenertator;-- set serveroutput on; -- 执行,产生数据量通过参数指定 call mockdatagenertator(1000);-- 查询数据select * from tab_mock_data;--- 清理数据drop sequence mock_data_seq;drop table tab_mock_data;drop proceduremockdatagenertator;
有时候测试场景需要多张结构完全相同的表,比如做分表实验或者压力测试。下面这段匿名块就特别省事——只需指定数量,循环执行DDL语句,瞬间就能生成10张(或任意数量)结构一致的表。
declaremaxtablecount number;beginmaxtablecount := 10;while maxtablecount > 0 loopexecute immediate 'create table tab_mock_data' || maxtablecount || ' (id number,serno long,username varchar2(50),birthdate date,sex number(1),amount number(19,6),tag varchar2(20),remark varchar2(200),inputdate timestamp)';maxtablecount := maxtablecount - 1;end loop;end;
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述