命令行上的sqlloader语法错误

时间:2013-02-20 11:51:57

标签: oracle sql-loader

我无法弄清楚在这种情况下尝试通过命令行执行sqlloader时语法错误在哪里。这似乎没问题。

命令:

sqlldr myuser/mypass@myhost:1521/orcl CONTROL=tbx.ctl LOG=C:\path\to\tbx.log BAD=C:\path\to\tbx.bad skip=0   

CTL档案:

load data 
infile 'C:\path\to\tbx.csv'
into table TBX
fields terminated by ';'
optionally enclosed by '"' AND '"'
( x,
  xx,
  xxx,
  xxxx,
  xxxxx,
  xxxxxx,
  xxxxxxx,
  xxxxxxxx,
  xxxxxxxxx
)

CSV文件:

"724098100357859";"";"";"";"";"";"";""
"724098100358417";"";"";"";"";"";"";""
...

ERROR:

  

SQL * Loader-100:命令行上的语法错误

表格结构:

CREATE TABLE TBX
(
"x" VARCHAR2(20 BYTE), 
"xx" VARCHAR2(80 BYTE), 
"xxx" VARCHAR2(80 BYTE), 
"xxxx" VARCHAR2(80 BYTE), 
 "xxxxx" VARCHAR2(60 BYTE), 
 "xxxxxx" VARCHAR2(60 BYTE), 
 "xxxxxxx" VARCHAR2(60 BYTE), 
 "xxxxxxxx" VARCHAR2(60 BYTE), 
 "xxxxxxxxx" VARCHAR2(80 BYTE)
 )

1 个答案:

答案 0 :(得分:3)

如果路径中包含空格,则SQL * Loader会将路径视为多个参数,通常会生成LRM-00112错误。你没有证明这一点,但是从似乎是问题的评论中可以看出来。您需要将路径括在引号中:

sqlldr myuser/mypass@myhost:1521/orcl CONTROL='tbx.ctl' LOG='C:\path\with spaces\tbx.log' BAD='C:\path\with spaces\tbx.bad' skip=0

原始问题的偏离主题,但从评论中提取...当您使用@myhost:1521/orcl作为连接字符串时,您使用的是easy connection identifier(链接用于SQL * Plus) ,但这同样适用于此)。最后一个元素是数据库的服务名称,它可能与SID不同 - 例如,它可能是orcl.example.com。在数据库服务器上,您可以运行lsnrctl statuslsnrctl services以查看哪些服务名称有效。但是,如果您已经有了工作tnsnames.ora,则可以使用TNS别名,例如: sqlldr myusr/mypass@orcl