Oracle生成大量測試資料的方法
阿新 • • 發佈:2018-12-14
方法一:建立一個表,並同時新增1000000條資料,程式碼:
- create table TestTable as
- select rownum as id,
- to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
- trunc(dbms_random.value(0, 100)) as random_id,
- dbms_random.string('x', 20) random_string
- from dual --寫死的
- connect by level <= 1000000;
方法二:在建立表後,原來表的基礎上追加記錄,比如在方法一建立的TestTable表中追加1000000條資料,程式碼:
- insert into TestTable
- (ID, INC_DATETIME,RANDOM_ID,RANDOM_STRING)
- select rownum as id,
- to_char(sysdate + rownum, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime, --天數依次遞增
- trunc(dbms_random.value(0, 100)) as random_id,
- dbms_random.string('x', 20) random_string
- from dual
- connect by level <= 1000000;
上面SQL是利用了Oracle資料庫語法的幾個實用小技巧實現的: 1、利用Oracle特有的“connect by”樹形連線語法生成測試記錄,“level <= 10”表示要生成10記錄; 2、利用rownum虛擬列生成遞增的整數資料; 3、利用sysdate函式加一些簡單運算來生成日期資料,本例中是每條記錄的時間加1秒; 4、利用dbms_random.value函式生成隨機的數值型資料,本例中是生成0到100之間的隨機整數; 5、利用dbms_random.string函式生成隨機的字元型資料,本例中是生成長度為20的隨機字串,字串中可以包括字元或數字。
6、to_char(sysdate + rownum, 'yyyy-mm-dd hh24:mi:ss') 這裡是轉換為字串,如果該欄位的型別為TimeStamp時間戳,那這裡可以改寫一下方法,轉換為時間戳 to_timestamp(sysdate + rownum, 'yyyy-mm-dd hh24:mi:ss')