我正在访问商业数据库。通过提示:
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 :(得分:1)
您可以使用odbcGetInfo()查看有关正在使用的驱动程序的信息。
考虑到ODBC的起源,您是否尝试过使用ROracle(DBI包)? RJDBC在Linux环境中也可能是一个更稳定的选项,特别是现在fetch()代码已经用Java重写(截至R-Forge的开发版本0.2-0),其性能与之相当(如果不是比RODBC好。
听起来可能很明显,但是R32会出现问题(如果这对你来说甚至是一个选项)?众所周知,32位与64位驱动程序的不兼容性很难追踪; Windows会抱怨架构不匹配使用R64和32位ODBC驱动程序并导致odbcConnect()完全失败,但我不知道Linux是否相同。
答案 1 :(得分:1)
找到解决方案;不知道为什么会有效,但现在是:使用选项rows_at_time=1
sqlQuery(connection1,query,rows_at_time=1)