2014-01-22 55 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

相关问题