首先我們需要建立一個表爲tb_1,在裏面添加一個(或多個)字段。這裏我只添加一個字段爲name並添加一行數據。然後我們可以在這個表中添加百萬條數據,方法如下:
一.藉助Oracle中的dual表
select * from tb_1,(select level from dual connect by level <= 1000000);
其中dual表是Oracle中的一個虛擬表,用來構成select的語法規則,裏面無論什麼時候都只有一條記錄。這個表的存在是爲了方便用戶在沒有實際表的存在時做各種各樣的操作:如查看當前用戶,調用系統函數,獲得當前系統時間,主機名等等,在這裏就不細講了。
而connect by level是Oracle中一組的關鍵字,主要是用來進行遞歸查詢,但是也有一個特殊的用法:生成1…n序列。 在這裏我們使用這個特殊用法後,能將原表複製出N份記錄。
但是注意,當數據量到達449420時會強行中止,系統會報“conncet by內存上限爲100MB”的錯誤:
二.使用xmltable方法
select * from tb_1,(xmltable('1 to 10000'));
在Oracle 10之後開始支持XML數據格式,我們可以用xmltable來進行大量數據複製並且轉化成XML數據。但是數據製造非常慢的,一般不需要大量數據複製並轉化XML格式的時候,儘量避免用這個方法。結果如下:
三.使用循環語句+自我插入複製
DECLARE
X number;
BEGIN
X:=0;
LOOP
X:=X+1;
insert into tb_1 select *from tb_1;
EXIT WHEN X > 11;
END LOOP;
END;
Oracle中的循環有多種方法,這裏我用loop循環,進行表的自我插入,相當於只有一條數據的表自我插入後變成兩條數據,二變四,四變八。。。。。當經過N次循環之後,本來表中只有一條數據,現在變成2^N條數據。
這個方法耗時少,速度快,一般要產生批量測試數據時推薦這個辦法。結果如下:
以上是在Oracle中批量添加百萬條測試數據的常用方法,如果還有別的更好的方法,歡迎各位大神留言補充!