使用數據庫時,有時需要使用大量的數據,可以用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中,單引號( ' ) 還會被視為轉義符,即 ’‘ 代表 ’
-
切換到其他需要生成數據的表時,可以保留上一張表對數據的定義