使用数据库时,有时需要使用大量的数据,可以用PLSQL Developer提供的Data Generator工具,
这里记录一下工具的介绍及几个使用注意事项
1、工具介绍
功能入口位于 工具 菜单下,汉化版名字为 数据生成器,英文版称为 Data Generator。
这个工具可以很方便的生成大量数据。
界面布局很简洁,看到界面就差不多知道后续要怎么做了。鼠标悬停在按钮上方时,会有对功能的简单描述,还是很方便的。
如果对界面不熟悉,可以看看其他文章,网上还挺多的。
2、数据定义(Data Definition)基本字符集合
选中需要处理的表格后,会自动加载表的字段信息(Name,Type,Size), 位于后方的 Data 列用于定义生成的数据。
先说一下预定义的字符集(characters):
标识符 | 代表字符集合 |
---|---|
a | abcdefghijklmnopqrstuvwxyz |
A | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
@ | A..Z a..z(省略中间的) |
# | A..Z a..z 0..9 |
0 | 0..9(和9一样) |
9 | 0..9(和0一样) |
1 | 1..9 |
* | 所有的ASCII字符 |
举例来说:
[Aaa00]
会生成类似 Gxe21,Liy05这样的字符串
[AA '-' 1000]
会生成 CX-4903,SY-1044这样的数据,定义中 单引号 包裹的内容会直接输出,定义中 没有在单引号内的空格 会被忽略。
[Aa(5..15)' 'Aa(8..20)]
会生成 Masfae Qwwecdsadif 样子的数据,定义中小括号内的数据定义了随机生成的字符数量的界限。
3、数据定义时可用的函数
下面这段引用了(转)PL/SQL Developer Data Generator的使用 - 失乐园 - BlogJava 的内容:
-
Signal(Min, Max, Delta, Noise) 返回技术测定数据(象温度这样的)。
Min(最小)和 Max(最大)决定范围, Delta(△)为最大更改量,还可以添加一些 Noise(噪声)。例如:Signal(-10, 20, 0.1, 0.1)。
-
Random([Min], Max) 返回Min(最小)和 Max(最大)之间的随机数。
如果只指定了 Max ,那么 Min 就被设为 0 。对于日期字段,可以输入Min(最小)和 Max(最大)的日期。
-
Sequence(Start, [Inc], [WithinParent]) 返回序号。
Start 为开始值,Inc 为增量(默认为 1)。对于明细表,可以再指定 WithinParent 关键词来指出序列应该为每个父记录进行重新安排。
-
List('item'(weight), 'item'(weight), ...) 随机地返回指定项目(item)之一。
加权数(weight)可以被添加到两个括号之间,允许特定项目比其他项目出现的几率更大。
例如:List('CLERK'(50), 'SALESMAN'(30), 'MANAGER'(10))
-
List(select statement) 象前面的 List 函数,但项目是通过 SQL select statement(select 语句)返回的。
-
Text([Style], MaxCharacters, [WordsPerLine, LinesPerParagraph]) 这个函数返回文本。
可选择的 Style可以是是象 [aA] 这样的字符集,在这种情况下,词汇从指定的字符集中产生。
MaxCharacters 决定了生成的文本的最大大小,WordsPerLine 和 LinesPerParagraph 决定了行和段落的大小。
指定的大小可以是指定的数字或范围(最小..最大)。
-
File(path, path, ...) 从特定的路径(path)中随机地选择一个文件,并插入内容。
允许输入二进制数据(象图片这样的)到数据库中。路径可以使用通配符,象 d:"images"*.bmp 这样的。
可以通过使用下列函数更改前面函数的文本结果:
•Uppercase()
•LowerCase()
•InitCaps()
例如:InitCaps( List(select ename from emp) )
3、使用注意事项
-
未经测试,直接生成大量数据至数据库引发的无限弹窗报错
生成数据至数据库时,并不会遇到报错就停止,而是会继续向下执行,如果配置数据时存在错误,plsql会为每一个错误弹出一个窗口,如果一开始就生成了几万条数据,就会有几万个窗口等着你点击,这种时候只能关掉plsql的进程重新开始。
最佳的操作应该是在定义数据后,修改生成数据的数量,比如10,然后生成对应的sql,单独执行确认配置无误后再执行大数据量的插入。
-
生成的VARCHAR类型的数据,没有被单引号包裹
varchar2,nvarchar2等类型的字段插入数据时需要由单引号包裹,该工具生成的数据不包含单引号,插入时会出现 标识符过长,标识符无效等问题。
可以借用 List 函数解决该问题。如定义:List(select '''' from dual) + [A(4)] + List(select '''' from dual)可以生成类似 'HYSF' 的数据,因为在 oracle中,单引号( ' ) 还会被视为转义符,即 ’‘ 代表 ’
-
切换到其他需要生成数据的表时,可以保留上一张表对数据的定义