天天看點

oracle快速生成上千萬條測試資料

話不多說直接上代碼

insert into student
(ID,XM,ZJH,ZL,DJSJ,XYSJ)
select rownum as ID,
              dbms_random.string('x',2) as XM,
              trunc(dbms_random.value(100000000000000000,999999999999999999)) as ZJH,
              decode(trunc(dbms_random.value(1,3)),1,'11111111',
                                                   2, 'abcdefg',
                                                   3,'傳回值可以是數字,字元串,漢字等'
                                                   )as ZL,
              to_char(sysdate+rownum/24/3600,'yy-mm-dd hh24:mi:ss') as DJSJ,
              systimestamp as XYSJ
from xmltable('1 to 10000000')
           

上面SQL是利用了Oracle資料庫文法的幾個實用小技巧實作的:

1、利用xmltable(在10g開始支援XML後可用),如本例中的from xmltable(‘1 to 10000000’)即表示生成1000萬條資料,也可以利用Oracle特有的“connect by”樹形連接配接文法生成測試記錄,隻是将

from xmltable(‘1 to xx’)

換成

from dual

connect by level <= xx;

例“level <= 10”表示要生成10記錄,但是connect by level有上限,如果超出上限,系統會報,"connect by level"記憶體不足,我試過100萬條資料可以,但是再多就不行了,

2、利用rownum虛拟列生成遞增的整數資料;

3、利用sysdate函數加一些簡單運算來生成日期資料,本例中是每條記錄的時間加1秒;

4、利用dbms_random.value函數生成随機的數值型資料,然後用trunc函數傳回處理後的數值,其工作機制與ROUND函數極為類似,隻是該函數不對指定小數前或後的部分做相應舍入選擇處理,而統統截去,本例中是生成100000000000000000到999999999999999999之間的随機整數;

5、利用dbms_random.string函數生成随機的字元型資料,本例中是生成長度為2的随機字元串,字元串中可以包括字元或數字。

6、to_char(sysdate + rownum, ‘yyyy-mm-dd hh24:mi:ss’) 這裡是轉換為字元串,如果該字段的類型為TimeStamp時間戳,那這裡可以改寫一下方法,轉換為時間戳 to_timestamp(sysdate + rownum, ‘yyyy-mm-dd hh24:mi:ss’)

7、使用了decode函數,decode函數的格式為:decode(條件,值1,傳回值1,值2,傳回值2,…值n,傳回值n,預設值),使用trunc(dbms_random.value(1,3))随機産生數字1,2,3,再分别對應不同的傳回值(傳回值可以是數字,字元串,漢字等),即可實作随機插入漢字列。

8、systimestamp函數傳回本機資料庫上目前系統日期和時間(包括微秒和時區)。

轉載請注明出處: