2013-05-21 38 views
0

我可以在sqlplus對Oracle表運行此查詢,它的工作原理,我得到返回結果:無法運行中的R對Oracle表的SQL查詢

SELECT * FROM KEYNOTE_PRD WHERE KEYNOTE_PRD."Site"='High Frequency NY Traffic' 

但我儘量同爲R內的下列代碼:

tryCatch({ 
    ch=odbcConnect("<id>",pwd = "<passwd>") 
    sql<-c("SELECT * FROM KEYNOTE_PRD WHERE KEYNOTE_PRD."Site"='High Frequency NY Traffic'") 
    res<-sqlQuery(ch, sql) 

},error = function(e) { 
    print(odbcGetErrMsg(ch)) 

    print("retrive or connect to the db") 
}) 
odbcClose(ch) 

它不起作用。我認爲它不喜歡雙引號內的雙引號(KEYNOTE_PRD。「Site」)。任何想法如何解決這個問題?

+1

雙引號是變量名稱的一部分嗎? (比你要逃避'\\''') – sgibb

+0

或者你可以使用sprintf,paste,cat或任何其他函數來插入字符串 – hd1

+0

@sgibb,我做到了,仍然沒有工作:sql < c(「SELECT * FROM KEYNOTE_PRD T WHERE T。\\ Site \\」='高頻NY流量'「) – user1471980

回答

0

這會幫助不熟悉Oracle的人。 asnwer非常簡單。 我將列名更改爲大寫字母,並解決了此問題。這必須是一個神諭的東西。

tryCatch({ 
    ch=odbcConnect("<id>",pwd = "<passwd>") 
    sql<-c("SELECT * FROM KEYNOTE_PRD WHERE KEYNOTE_PRD.SITE='High Frequency NY Traffic'") 
    res<-sqlQuery(ch, sql) 

},error = function(e) { 
    print(odbcGetErrMsg(ch)) 

    print("retrive or connect to the db") 
}) 
odbcClose(ch) 
0

我剛碰到相同類型的問題,列名較低,我無法控制表。解決方案是用單個\字符來避開引號。它像一個魅力。