2013-02-20 63 views
-1

我找不到在这种情况下尝试通过命令行执行sqlloader的语法错误。这似乎是好的。命令行上的sqlloader语法错误

命令:

sqlldr myuser/[email protected]: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: Syntax error on command-line

表结构:

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

您真正的'\ path \ to'值是否有空格?横幅广告前可能还会有更有用的信息。 – 2013-02-20 11:58:36

+0

以及为什么你不只指定'orcl'而不是'@myhost:1521/orcl'?如果Orcl在tnsnames.ora中定义,则不需要指定主机和端口。 – 2013-02-20 12:13:09

+0

我可能是错的,但不是它USERID = blah?并使用tnsnames,那么USERID = myuser @ mydb/mypwd – tbone 2013-02-20 12:35:04

回答

2

如果路径中有空格的,然后使用SQL * Loader会看到一个路径作为多个参数,通常产生LRM-00112错误。你没有显示,但从看似确实是问题的评论。您需要封闭路径在引号:

sqlldr myuser/[email protected]: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/[email protected]