2011-05-10 72 views
0

我正在訪問商業數據庫。通過提示:RODBC返回0值

select PersonCode, PersonDate from CODB.mastertable where PersonCode=42 
PersonCode PersonDate 
----------- ------------ 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 
     42 Jan 3 2011 

在R:

library(RODBC) 
query <- "select PersonCode, PersonDate from CODB.mastertable where PersonCode=42" 

connection1 <- odbcConnect("RESDB", uid="userID", pwd="pwdaccess", believeNRows=FALSE) 

sqlQuery(connection1,query) 


sqlQuery(connection1,query) 
    PersonCode     PersonDate 
1   42 01/03/2011 00:00:00.000 UTC 
2   42 01/03/2011 00:00:00.000 UTC 
3   42 01/03/2011 00:00:00.000 UTC 
4   42 01/03/2011 00:00:00.000 UTC 
5   42 01/03/2011 00:00:00.000 UTC 
6   0 01/03/2011 00:00:00.000 UTC 
7   0 01/03/2011 00:00:00.000 UTC 
8   0 01/03/2011 00:00:00.000 UTC 
9   0 01/03/2011 00:00:00.000 UTC 
10   0 01/03/2011 00:00:00.000 UTC 

查詢的輸出不正確。有沒有人遇到過這個問題?這裏有一些附加信息。

> sessionInfo() 
R version 2.12.1 (2010-12-16) 
Platform: x86_64-unknown-linux-gnu (64-bit) 

locale: 
[1] C 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base 

other attached packages: 
[1] timeDate_2130.92 data.table_1.5.3 RODBC_1.3-2 

loaded via a namespace (and not attached): 
[1] tools_2.12.1 
+0

?你是通過ODBC還是直接連接?使用R,你使用的是什麼ODBC驅動程序?在使用64位Linux的RODBC中存在已知的錯誤,但當您應該獲得NA(NULL數據)時,它們通常會給出0。我從來沒有見過非NULL數據的腐敗。 – Harlan 2011-05-10 21:01:55

+0

我認爲你的R安裝(locale可能?)有一些非常時髦的事情。這看起來非常類似於[早期問題](http://stackoverflow.com/q/5915728/271616)。這是否發生在您之前的問題中顯示的兩種情況中? – 2011-05-10 21:05:12

+0

@harlan 1. sqsh,或者也叫dbvis的前端。其他用戶使用其他應用程序獲得相同的結果。 2.如何告訴正在使用的ODBC驅動程序?我想提供這些信息。 @joshua不,這不是我昨天遇到的問題。雖然我必須說,在3次罷工後,我可能不得不將一些關鍵代碼移到Python中。我不能承受錯誤。 – gappy 2011-05-10 21:12:08

回答

1

找到了解決辦法;不知道爲什麼它的工作原理,但在這裏它是:當你說「通過提示」,您使用什麼應用程序使用的選項rows_at_time=1

sqlQuery(connection1,query,rows_at_time=1) 
1

您可以使用odbcGetInfo()查看有關所使用的驅動程序的信息。

考慮到ODBC的起源,你有嘗試過使用ROracle(DBI包)嗎?在Linux環境中,RJDBC也可能是一個更穩定的選項,特別是現在fetch()代碼已被重新​​編寫爲Java(截至R-Forge開發版0.2-0),其性能與(如果不是好於)RODBC。

這聽起來很明顯,但問題是否發生在R32上(如果這對你來說甚至是一種選擇)?衆所周知,32位與64位驅動程序的不兼容性難以追查; Windows會抱怨使用R64和32位ODBC驅動程序導致架構不匹配,並導致odbcConnect()徹底失敗,但我不知道Linux是否相同。

+0

不幸的是,ROracle近四年來一直沒有更新。 R對Oracle的支持是在企業系統中使用的一個*真正的問題,有人必須投資解決方案!試圖修補ODBC來處理64位問題是一個巨大的痛苦,作者沒有時間處理它。 – Harlan 2011-05-11 15:21:43