我无法弄清楚在这种情况下尝试通过命令行执行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)
)
答案 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 status
或lsnrctl services
以查看哪些服务名称有效。但是,如果您已经有了工作tnsnames.ora
,则可以使用TNS别名,例如: sqlldr myusr/mypass@orcl
。