我有一个CSV文件,其中的是多行数据。在该文件中需要注意的重要一点是,每条记录以CRLF字符结尾,而多行不完整记录以LF结尾。现在,如果我在SQL Loader下使用以下.ctl文件,则记录加载成功。下面是CSV文件快照(正确的file.jpg)和ctl文件。
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文件的快照。
我还注意到,如果我将ctl文件的INFILE选项更改为INFILE 'C:\Users\puspender.tanwar\Desktop\try_SQLLDR\csvfile.csv "str '\r\n'"'
,那么该记录也会加载第一个CSV(仅限)。因此,如果我使用"str '\n'"
代替"str ' \r\n'"
,则应加载第二张CSV记录,但不幸的是,这并不乐观。
请告诉我如何通过在.ctl文件中进行一些修改来处理这个问题。或任何其他方式来解决这个问题。