首页 > 解决方案 > 由于列中的双引号超过 2 个,sqlldr 失败

问题描述

问题是当我在 NAME 列中放置两个以上的双引号时(检查下面的代码)然后 sqlldr 失败。在data.txt文件中,前 3 条记录失败,因为 NAME 列(记录中的第二个位置)有超过 2 个双引号。请协助。我认为我需要针对 NAME 列将一些功能放入控制文件中。

您可以运行以下代码并检查,前 3 条记录将失败,最后一条记录将被插入,我想插入所有带或不带双引号的记录:

--table creation
    create table employee
    (      
      name varchar2(4000)      
    );


--control file
load data
 infile '/tmp/swetabh/data.txt' 
 into table employee
 truncate
 fields terminated by "," OPTIONALLY ENCLOSED by '"'  TRAILING NULLCOLS 
 (
 name      
 )


--data.txt (SEE ALL RECORDS ARE HAVING MORE THAN 2 DOUBLE QUOTE AND WANT TO INSERT DATA TO THE TABLE WITH OR WITHOUT DOUBLE QUOTE)
""start with double quote       "
"end with double quote          ""
"double quote " in the middle   "

-bash-4.1$ sqlldr userid=xxx/xxx@xxxx control=/tmp/swetabh/control.txt log=/tmp/swetabh/control.log bad=/tmp/swetabh/bad.txt readsize=2000000000 bindsize=2000000000

标签: sqloracleplsqlplsqldevelopersql-loader

解决方案


您对流程的提取部分有任何控制权吗?如果是这样,您可以指定数据中的双引号加倍(引用)吗?或者更好的是,指定使用管道作为分隔符,并且不使用双引号。


推荐阅读