兩種方法
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司,提供成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進行網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
1. 使用pl/sql developer
這種方法比較簡單,我曾經(jīng)這么一次導(dǎo)入過幾萬條記錄
2.sqlldr
首先將你的excel文件另存為csv格式(默認逗號間隔,另存為csv,不只是改后綴名)
然后用sqlldr導(dǎo)入。sqlldr的參數(shù)很多,簡單的幾個就可以了:
建一個控制文件control.txt:
load data
infile 'f:\test.csv'
into table test1
(id char terminated by ',',
name char terminated by ',',
height char terminated by ',',
birth char terminated by whitespace)
----這里你根據(jù)需要,修改數(shù)據(jù)文件的名字和路徑。括號里面的字段名和字段數(shù)也根據(jù)實際情況修改。由于保存的是csv,字段間以逗號隔開,因此控制文件里定義最后一個字段以whitespace來分隔,其它的用','
然后使用sql*loader:
sqlldr userid=USERNAME/PASSWORD@XXXX control=f:\control.txt log=f:\test.log bad=f:\testbad.csv
userid后跟用戶名密碼,@后的是網(wǎng)絡(luò)服務(wù)名,需要在客戶端的tnsnames.ora文件里定義。control后的值是剛剛建的控制文件的路徑,日志將生成在log參數(shù)指定的位置上,如果有記錄沒有導(dǎo)入成功,這些記錄會放置在bad后指定的文件里。
使用loop循環(huán),比如:
for item in (select a,b,c from table_a where 條件) loop
insert into table_b(a,b,c) values (item.a,item.b,item.c);
end loop;
也可以使用索引表循環(huán),以上只是一個簡單的例子,需要根據(jù)你的具體情況選擇循環(huán)方式。
1、采用insert into values 語句插入一條,寫很多條語句即可多條數(shù)據(jù),這種主要針對于離散值以及一些基礎(chǔ)信息的錄入,如:insert into test(xh,mc) values('123','測試');
如果插入的數(shù)據(jù)有規(guī)律,可利用for、loop循環(huán)插入,主要用于批量生成測試數(shù)據(jù)
begin
for i in 1 .. 100 loop
insert into test(xh,mc) values(i||'','測試');
end loop;
end ;。
2、采用insert into selct from 語句來一次性插入一個集合,這種主要依據(jù)于要插入的數(shù)據(jù)源已經(jīng)存儲于數(shù)據(jù)庫對象中,或者利用dual虛表來構(gòu)造數(shù)據(jù),經(jīng)過加工后寫入一個集合。
insert into test (xh,mx) select '123','測試' from dual;
3、采用plsql等工具、或者oracle的imp、impdp命令來導(dǎo)入,這種主要用數(shù)據(jù)庫與數(shù)據(jù)庫之間的大批量數(shù)據(jù)導(dǎo)入,導(dǎo)入的數(shù)據(jù)格式為plsql的pde、oracle的dmp等。dmp文件可使用
table_exists_action參數(shù)控制導(dǎo)入動作:replace替換原表,truncate清除原表數(shù)據(jù)再導(dǎo)入,append增量導(dǎo)入數(shù)據(jù),當然impdp數(shù)據(jù)泵的導(dǎo)入要依賴于directory路徑。
impdp 用戶名/密碼 dumpfile=123.dmp logfile=123.log directory=imp_dir tables=test table_exists_action=append。
4、使用excel文件直接拷貝。這種主要用于要寫入的數(shù)據(jù)已是excel文件或者行列分明的其它格式文件,每一列的值和表結(jié)構(gòu)相對應(yīng),可直接打開表的行級鎖,把數(shù)據(jù)拷貝進入。
需要生成的SQL
insert into TMP_UPSTATE_CASEKEY values('TMP0000001', 1, sysdate);
存儲過程實現(xiàn)
create or replace procedure proc_casekey_upstate
as
casekey char(14);
begin
for i in 1..10000000 loop
casekey := 'TMP'||lpad(i,7,0); -- TMP0000001
insert into TMP_UPSTATE_CASEKEY values(casekey, 1, sysdate);
end loop;
commit;
end;
begin
proc_casekey_upstate();
end;
測試發(fā)現(xiàn)生成一千萬條數(shù)據(jù)用了14分鐘左右,性能還是可以了,如果先去掉TMP_NUM_STATUS_ID的外鍵估計更快。
或者:
insert into TMP_UPSTATE_CASEKEY select 'TMP'||LPAD(rownum,7,0),1,sysdate from dual connect by level = 1000000;
可以通過第三方工具來處理,比如powerdesigner
具體可以度娘 'powerdesigner 測試數(shù)據(jù)'
那要看你需要什么類型的數(shù)據(jù)了。
最簡單的,寫一個存儲過程,在里頭添加一個insert,循環(huán)個 大量 次數(shù)。
如果存在其他表中有大量數(shù)據(jù)的,也可以
insert 新表 select from 其他表。
注意一下字段類型。
如果是文本文件(不一定是純文本,execl也可以,另存為文本就可以,只要注意一下分隔符號就可以了),那么sqlloader導(dǎo)入,只要參數(shù)設(shè)置對了,這個應(yīng)該是比較快的。
如果是從其他表插入,而且數(shù)據(jù)量很大,那么就寫腳本分批insert,commit;
當然用其他工具也可以,比如用plsql developer的導(dǎo)入功能,或者復(fù)制。
關(guān)鍵看是什么類型的數(shù)據(jù)。