|
本帖最后由 樱花季节 于 2010-12-31 09:25 编辑
ETL测试过程中,构造标准数据集往往是很关键和复杂的一个环节。
目前我们的标准数据集的构造通常包括两个部分:
一部分是造一批基础数据,包括空值,边界值,中文,乱码,特殊符号,负数,小数等。
一部分是造业务数据。
针对第一部分,如果是单纯手工造数据,效率不高,且还容易出错,这里我写了一个比较通用的过程,用来批量造数据。
代码包如下:
create or replace package PKG_GENERATEDATA is
-- Author : XIANGMIN.MENGXM
-- Created : 2009-6-24 下午 03:43:05
-- Purpose : 生成数据
/* CREATE TABLE COL_TYPE_TABLE
(
col_type VARCHAR2(100),
col_value VARCHAR2(100)
);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',NULL);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',0);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',-1);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',-1.123456);
INSERT INTO COL_TYPE_TABLE VALUES('VARCHAR2',NULL);
INSERT INTO COL_TYPE_TABLE VALUES('VARCHAR2','ABC');
INSERT INTO COL_TYPE_TABLE VALUES('VARCHAR2','????');
INSERT INTO COL_TYPE_TABLE VALUES('DATE','20100606');
INSERT INTO COL_TYPE_TABLE VALUES('DATE',NULL);
*/
type array1 is table of VARCHAR2(32767) index by pls_integer;--定义一维数组
type array2 is table of array1 index by pls_integer;--定义二维数组
TYPE record_cols IS RECORD(column_name VARCHAR2(100),
data_type VARCHAR2(100),
data_length NUMBER,
data_precision NUMBER,
data_scale NUMBER,
nullable VARCHAR2(100));
TYPE type_cols IS TABLE OF record_cols INDEX BY PLS_INTEGER;--定义嵌套表
PROCEDURE OPERATOR(
/*********************************************************************
*功能:自动生成数据的总调度存储过程
*parameter:
*作者:XIANGMIN.MENGXM
*时间:2009-6-26
*备注:
*********************************************************************/
p_owner IN VARCHAR2, --预生成表的所有者
p_table_name IN VARCHAR2--预生成表名
);
end PKG_GENERATEDATA;
使用步骤:
1. 在数据库中创建一张保存数据类型与值的映射表
CREATE TABLE COL_TYPE_TABLE
(
col_type VARCHAR2(100),
col_value VARCHAR2(100)
);
2. 在COL_TYPE_TABLE表中插入数据类型与值
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',NULL);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',0);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',-1);
INSERT INTO COL_TYPE_TABLE VALUES('NUMBER',-1.123456);
INSERT INTO COL_TYPE_TABLE VALUES('VARCHAR2',NULL);
INSERT INTO COL_TYPE_TABLE VALUES('VARCHAR2','ABC');
INSERT INTO COL_TYPE_TABLE VALUES('VARCHAR2','????');
INSERT INTO COL_TYPE_TABLE VALUES('DATE','20100606');
INSERT INTO COL_TYPE_TABLE VALUES('DATE',NULL);
这里我为number类型准备了null,0,-1等值。
类型是oracle中数据类型,如:number,varchar2,date等。想要给指定类型造自己想要的数据,只需要在此表中添加对应的类型和值即可。
3. 下载附件中 基础数据生成.rar,编译。
4. 调用。
SQL>PKG_GENERATEDATA.OPERATOR('p_owner','p_table_name');--p_owner是造数据表的schema,p_table_name是造数据的表名
5.查看构造的数据
SQL>SELECT/*+ parallel(a 4)*/ * FROM p_table_name a; |
|