gpt4 book ai didi

r - 使用 RODBC 从 Revolution R 查询 Oracle DB

转载 作者:行者123 更新时间:2023-12-04 02:36:31 25 4
gpt4 key购买 nike

使用 64 位 ODBC 驱动程序通过 DSN 连接到 Oracle 的 winxp64 位上的 Revolution R 64 位中的 RODBC 错误

library(RODBC)
db <- odbcConnect("oraclemiso",uid="epicedf",pwd="…")
rslts = sqlQuery(db, "select count(*) from FTRAuction")

Error in .Call(C_RODBCFetchRows, attr(channel, "handle_ptr"), max, buffsize, :
negative length vectors are not allowed

我能够连接但在查询内容时出错,
还有下面的作品
 library(RODBC)
channel <- odbcConnect("OraLSH", <user>, <password>))
odbcQuery (channel, "select sysdate from dual")
sqlGetResults(channel, as.is=FALSE, errors=FALSE, max=1, buffsize=1,
nullstring=NA, na.strings="NA", believeNRows=TRUE, dec=getOption("dec"))
SYSDATE
1 2010-01-24 15:10:02

但是如果我事先不知道 rowsize(max=1) 怎么办

谢谢,
阿伦

最佳答案

trustNRows=FALSE 似乎是关键。最好在打开连接时使用它:

db <- odbcConnect(dsn="testdsn", uid="testuser", pwd="testpasswd", believeNRows=FALSE )



在使用 unixODBC 的 isql 进行测试时,它在 64 位 Linux 上报告 SQLRowCount 为 4294967295(即使只有一行),而在 32 位 Linux 上则报告为 -1。这可能是一种优化,因为它可以提供更快的答案。它减轻了数据库立即检索完整响应数据集的负担。例如。可能会有很多记录,而只会获取前几个点击。

4294967295 是 (2^32)-1,这是无符号整数的最大值,但将被视为 -1 并带有符号整数。因此,R 提示长度为负的向量。
所以我认为这是一个关于有符号与无符号整数(或 32 位和 64 位之间的 sizeof(long) )的问题。

设置 trustNRows=FALSE 为我解决了这个问题,因此我可以在两个系统上使用相同的 R 代码。

顺便说一句:我在 Linux 64 位上使用 R 2.10.1、RODBC 1.3.2、unixODBC 2.3.0 和 Oracle 10.2.0.4。
务必使用

export CFLAGS="-DBUILD_REAL_64_BIT_MODE -DSIZEOF_LONG=8 -fshort-wchar"



在为 unixODBC 进行配置时,因为 Oracle ODBC 驱动程序需要 REAL_64_BIT_MODE,而不是 LEGACY_64_BIT_MODE。

并注意国际化问题:R 使用 $LANG 而 Oracle 使用 $NLS_LANG。

我遇到了 UTF8 的问题,所以我使用例如

LANG=en_US; NLS_LANG=American_America

关于r - 使用 RODBC 从 Revolution R 查询 Oracle DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3407015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com