將excel數(shù)據(jù)導(dǎo)入oracle中
http://www.douzhe.com/docs/bbsjh/8/3383.html 這個(gè)帖子的討論,整理如下:
A、有一個(gè)比較麻煩但保證成功的方法。
1、在本地創(chuàng)建一個(gè)Access數(shù)據(jù)庫(kù),將Excel數(shù)據(jù)先導(dǎo)入到Access??芍苯訉?dǎo)入點(diǎn)擊鼠標(biāo)右鍵,選擇導(dǎo)入,文件類型選擇要導(dǎo)入的Excel文件,也可通過(guò)創(chuàng)建宏用TransferSpreadsheet函數(shù)實(shí)現(xiàn)。
2、在本地創(chuàng)建ODBC,鏈接oracle數(shù)據(jù)庫(kù)。將oracle中需要導(dǎo)入數(shù)據(jù)的表以鏈接表的方式在本地Access中創(chuàng)建(千萬(wàn)不要使用導(dǎo)入表)。
3、在Access數(shù)據(jù)庫(kù)中創(chuàng)建插入查詢將導(dǎo)入好的Excel數(shù)據(jù)導(dǎo)入到oracle中。
此方法保證成功。
B、也可以導(dǎo)入sql server 用它的導(dǎo)出工具導(dǎo)入oracle 但對(duì)一些image字段支持不好,你如果
沒(méi)這種字段就行。
用MS_sqlserver 提供的數(shù)據(jù)導(dǎo)出導(dǎo)入功能可以方便的把excel方便的導(dǎo)入oracle數(shù)據(jù)庫(kù)
C、一種方法:
先把Excel另存為.csv格式文件,如test.csv,再編寫(xiě)一個(gè)insert.ctl
用sqlldr進(jìn)行導(dǎo)入!
insert.ctl內(nèi)容如下:
load data --1、控制文件標(biāo)識(shí)
infile 'test.csv' --2、要輸入的數(shù)據(jù)文件名為test.csv
append into table table_name --3、向表table_name中追加記錄
fields terminated by ',' --4、字段終止于',',是一個(gè)逗號(hào)
(field1,
field2,
field3,
...
fieldn)-----定義列對(duì)應(yīng)順序
注意括號(hào)中field排列順序要與csv文件中相對(duì)應(yīng)
然后就可以執(zhí)行如下命令:
sqlldr user/password control=insert.ctl
有關(guān)SQLLDR的問(wèn)題
控制文件:input.ctl,內(nèi)容如下:
load data --1、控制文件標(biāo)識(shí)
infile 'test.txt' --2、要輸入的數(shù)據(jù)文件名為test.txt
append into table test --3、向表test中追加記錄
fields terminated by X'09' --4、字段終止于X'09',是一個(gè)制表符(TAB)
(id,username,password,sj) -----定義列對(duì)應(yīng)順序
其中append為數(shù)據(jù)裝載方式,還有其他選項(xiàng):
a、insert,為缺省方式,在數(shù)據(jù)裝載開(kāi)始時(shí)要求表為空
b、append,在表中追加新記錄
c、replace,刪除舊記錄,替換成新裝載的記錄
d、truncate,同上
問(wèn)題:SQLLDR能不能保留表中原有的數(shù)據(jù),如果發(fā)現(xiàn)KEY重復(fù)時(shí),再UPDATE對(duì)應(yīng)的記錄?
D、先?EXCEL文件??成TXT文件
再使用SQLLOADER
E、將EXCEL文件保存成*.csv格式. 然后用sqlload來(lái)導(dǎo)入表中.
sqlload是Oracle自帶的數(shù)據(jù)倒入工具,應(yīng)該是沒(méi)有可視化工具的(至少我一直用命令行)。
直接在命令行下敲入sqlldr即可得到幫助。
F、如果你的單個(gè)文件不大的情況下(少于100000行), 可以全選COPY ,然后用PL/SQL.:
select * from table for update. 然后打開(kāi)鎖, 再按一下加號(hào). 鼠標(biāo)點(diǎn)到第一個(gè)空格然后粘貼. COMMIT即可.(小竅門(mén), ORACLE不支持的, 但很好用, 不會(huì)有問(wèn)題)
G、Golden的imp/exp工具可以直接導(dǎo)入文本文件,非常簡(jiǎn)單
下面這個(gè)不知道是針對(duì)以上哪種方法的:
放心:excel文件最多只有65536條記錄
不放心:曾經(jīng)如此導(dǎo)過(guò),但當(dāng)有中文字段時(shí)可能出現(xiàn)異常(PL/SQL DEV5)
我用的是A,OK,時(shí)間倉(cāng)促,其他的沒(méi)有試過(guò)。
http://www.itpub.net/101803.html 這個(gè)帖子如是說(shuō):
你用的方法可能是:
1. 存成txt文件, 再用sql*loader
2. 存成txt文件, 再用第三方工具(如pb, delphi, toad, pl/sql dev等)導(dǎo)入.
sql*loader用起來(lái)費(fèi)勁, 為了小小的需求, 裝一個(gè)第三方工具麻煩.
看看我的方法.
比如文件中有id, name兩列(分別為A列和B列), 要導(dǎo)入的表為person(person_id, person_name)
在excel 文件的sheet的最右列, 添加一列, 對(duì)應(yīng)第一行數(shù)據(jù)的單元格寫(xiě)入以下內(nèi)容:
= "INSERT INTO PERSON(PERSON_ID, PERSON_NAME) VALUES('" & A1 & "', '" & B1 & "');"
然后把這一行復(fù)制到所有數(shù)據(jù)行對(duì)應(yīng)的列中.
這一列的內(nèi)容拷貝出去保存, 即成為可以直接在sql*plus下運(yùn)行的腳本.
方法一?日期型?位不適用
A、把Excel文件導(dǎo)到Acess里,然后打開(kāi)要導(dǎo)數(shù)據(jù)的表。
打開(kāi) PLSQL DEV,打開(kāi)一個(gè)SQL窗口,執(zhí)行
select * from [tab] for update
然后一列一列的從Acess里copy & paste 。
B、excel->copy->pl/sql developer>paste
實(shí)際操作時(shí)發(fā)現(xiàn),使用 copy / paste 經(jīng)常會(huì)發(fā)生莫其妙的問(wèn)題。尤其是通過(guò) access ( ODBC) copy 入 oracle 時(shí)。
EXECL -->SAVE AS *.CSV(COMMA DELIMITED). THEN LOAD IT DIRECTLY.
CTL FILE EXAMPLE
------------
Load Data
INFILE 'E:\AA.csv'
TRUNCATE
INTO TABLE AA
FIELDS TERMINATED BY ','
(A,
B)
C、在ACCESS中將ORACLE TABLE 映射,然后直接插入即可。很方便,也沒(méi)發(fā)現(xiàn)有數(shù)據(jù)錯(cuò)誤問(wèn)題。
曾經(jīng)有一個(gè)很麻煩的LONG RAW問(wèn)題,用這個(gè)辦法也解決了
D、用SQL*XL就可以直接將EXCEL文件導(dǎo)入ORACLE,很方便的,我一直用SQL*XL。
E、我常用的辦法是從excel中copy到ultraEdit中,然后用列編輯功能加上insert into ....等等,也挺好用
F、用plsql developer,很好用的,直接copy就可以了
在pl/sql developer 中選擇表的多個(gè)字段名,然后就可以paste 了
G、用odbc加pb的數(shù)據(jù)管道可以在不同的數(shù)據(jù)庫(kù)(文本)之間傳輸數(shù)據(jù)
H、odbc+pb
用不同的odbc驅(qū)動(dòng)程序連接不通的數(shù)據(jù)庫(kù)
然后在pb環(huán)境中啟動(dòng)數(shù)據(jù)管道,利用數(shù)據(jù)管道傳輸數(shù)據(jù)
I、先倒成。DBF的文件,再用DELPHI DATABASE DESKTOP 導(dǎo)入ORACLE很方便的,也且也可以支持空值導(dǎo)入。
http://www.itpub.net/showthread.php?s=7f7b57ea130ab71a3fdad57a71d8f8a1&threadid=97652&perpage=15&pagenumber=2
帖子很長(zhǎng),有空再整理。