plsql中資料生成工具data generator的使用
使用資料庫時,有時需要使用大量的資料,可以用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)
如果只指定了 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中,單引號( ' ) 還會被視為轉義符,即 ’‘ 代表 ’
-
切換到其他需要生成資料的表時,可以保留上一張表對資料的定義