2014-01-22 56 views
3

我試着用sql loader。事情是該表需要爲空的數據加載。是否有任何方式來做數據上傳而不截斷表。CSV數據需要附加在table.i使用oracle 11g。從命令行將數據從csv文件加載到oracle表中

+2

該表需要爲空,並且數據需要附加到表中的數據,並且您不想截斷它?這似乎是相反的。你能澄清你的問題,併發布你的SQL * Loader ctl文件和使用的命令行。 – Ben

+0

我假設「表格需要爲空」是指'INSERT'模式下的默認行爲;剩下的就是指你想要發生的事情?這將有助於準確顯示你的命令正在做什麼(包括控制文件)和你得到的錯誤...... –

+0

@ben我的日誌文件錯誤是 SQL * Loader-601:對於INSERT選項,表必須爲空。上表EMP – jasim

回答

6

SQL*Loader documentation說:

當你裝載一個表時,你可以使用INTO TABLE子句 指定一個特定的表裝載方法(INSERTAPPENDREPLACE,或TRUNCATE)只適用到那張桌子。該方法 將重寫全局表加載方法。缺省情況下,全局表格加載 方法爲INSERT,除非在任何INTO TABLE子句之前指定的不同方法是 。

因此,默認情況下,您的表格加載將在INSERT模式下,它要求表格爲空。

該文件還解釋了how to load data into a non-empty table;你的情況要保留現有數據:

追加
如果數據已經在表中存在,那麼使用SQL * Loader追加新行了。如果數據尚不存在,那麼只需加載新行。您必須擁有SELECT權限才能使用APPEND選項。

所以,你的控制文件將需要說的是這樣的(如圖所示in their example):

LOAD DATA 
INFILE 'my_file.dat' 
BADFILE 'my_file.bad' 
DISCARDFILE 'my_file.dsc' 
APPEND 
INTO TABLE my_table 
... 

你也可以考慮使用新的CSV數據爲external table並從插入到你的真正的表,這可能會更靈活一些。

+0

謝謝你的解決方案,我可以有更多的研究:-( – jasim

相關問題