在日常开发与测试中,Oracle 数据库经常需要快速填充大批模拟数据。下面分享两个非常实用的脚本:一个通过存储过程按需生成任意数量的随机记录,另一个则用匿名块批量创建结构相同的表。这两个方法在数据准备场景中堪称“利器”,能显著提升开发效率。
使用存储过程生成任意数量的随机数据
先来看第一个。如果你想生成100条、1000条甚至更多测试数据,手动编写 INSERT 显然不现实。这个存储过程通过循环和序列,能够灵活控制数据量,并且每条记录的日期、金额、性别字段都带有随机属性,非常贴近真实业务数据,特别适合 Oracle 随机测试数据的快速生成。
/** *创建序列,用于获得特征数据*/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张(或任意数量)结构一致的表,非常适合 Oracle 批量建表的快速实现。
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;