使用SQL Loader

时间:2017-06-30 11:26:43

标签: java database oracle oracle11g sql-loader

我有一个CSV文件,其中的是多行数据。在该文件中需要注意的重要一点是,每条记录以CRLF字符结尾,而多行不完整记录以LF结尾。现在,如果我在SQL Loader下使用以下.ctl文件,则记录加载成功。下面是CSV文件快照(正确的file.jpg)和ctl文件。 enter image description here

ctl文件:

OPTIONS ( 
    ERRORS=1,
    SKIP=1
)
LOAD DATA
CHARACTERSET 'UTF8'
INFILE 'C:\Users\puspender.tanwar\Desktop\try_SQLLDR\csvfile.csv'
BADFILE  'C:\Users\puspender.tanwar\Desktop\try_SQLLDR\badfile.bad' 
DISCARDFILE 'C:\Users\puspender.tanwar\Desktop\try_SQLLDR\DSCfile.dsc' 
CONTINUEIF LAST != '"'
INTO TABLE  ODI_DEV_TARGET.CASE
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
    ID  "REPLACE(:ID,'<br>',chr(10))",
    ISDELETED     "CASE WHEN :ISDELETED='true' then 'T' ELSE 'F' END",
    CASENUMBER  "REPLACE(:CASENUMBER,'<br>',chr(10))",
    DESCRIPTION CHAR(30000)
)    

现在,如果我加载了另一个包含完全相同数据的CSV文件,则无法加载记录。第二个csv文件的唯一区别是记录以LF结尾,不完整记录以CRLF结尾。我使用了相同的ctl文件但得到了错误:下面的Rejected - Error on table ODI_DEV_TARGET.CASE, column DESCRIPTION. second enclosure string not present是第二个csv文件的快照。enter image description here

我还注意到,如果我将ctl文件的INFILE选项更改为INFILE 'C:\Users\puspender.tanwar\Desktop\try_SQLLDR\csvfile.csv "str '\r\n'"',那么该记录也会加载第一个CSV(仅限)。因此,如果我使用"str '\n'"代替"str ' \r\n'",则应加载第二张CSV记录,但不幸的是,这并不乐观。
请告诉我如何通过在.ctl文件中进行一些修改来处理这个问题。或任何其他方式来解决这个问题。

0 个答案:

没有答案