plsql中資料生成工具data generator的使用

化雲隨風 發表於 2021-09-03
SQL

使用資料庫時,有時需要使用大量的資料,可以用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-4903SY-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中,單引號( ' ) 還會被視為轉義符,即 ’‘ 代表 ’

  • 切換到其他需要生成資料的表時,可以保留上一張表對資料的定義