-1

我无法弄清楚在这种情况下试图通过命令行执行 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";"";"";"";"";"";"";""
...

错误:

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)
 )
4

1 回答 1

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用作连接字符串时,您使用的是简单的连接标识符(链接适用于 SQL*Plus,但此处同样适用)。最后一个元素是数据库的服务名称,它可能与 SID 不同 -orcl.example.com例如,它可能是 。您可以在数据库服务器上运行lsnrctl statuslsnrctl services查看哪些服务名称有效。tnsnames.ora但是,如果您已经有一个工作的sqlldr myusr/mypass@orcl.

于 2013-02-20T17:10:20.263 回答