2013-02-20 319 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]