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
4

2 回答 2

1

您可以使用 odbcGetInfo() 查看有关正在使用的驱动程序的信息。

考虑到 ODBC 的起源,您是否尝试过使用 ROracle(DBI 包)?RJDBC 也可能是 Linux 环境中更稳定的选择,特别是现在 fetch() 代码已经用 Java 重写(截至 R-Forge 上的开发版本 0.2-0)它的性能与(如果不是优于)RODBC。

这听起来很明显,但是 R32 是否会出现问题(如果这对您来说是一个选项)?众所周知,32 位与 64 位驱动程序的不兼容性很难追踪;Windows 会抱怨使用带有 32 位 ODBC 驱动程序的 R64 架构不匹配,并导致 odbcConnect() 彻底失败,但我不知道 Linux 是否相同。

于 2011-05-11T13:41:38.280 回答
1

找到了解决方案;不知道它为什么起作用,但它是:使用该选项rows_at_time=1

sqlQuery(connection1,query,rows_at_time=1)
于 2011-05-19T20:55:22.550 回答