0

在“updateR”“update.packages”之后,我的 ROracle 与 Oracle 11.2g express 的连接在 R 4.0.4 下使用 dbplyr_2.1.0 停止运行。具体代码是

library(dplyr)
library(dbplyr)
library(DBI)
library(ROracle)
library(tidyverse)
sql_translate_env.OraConnection <- dbplyr:::sql_translate_env.Oracle

获取错误(名称,envir = asNamespace(pkg),继承 = FALSE):找不到对象“sql_translate_env.Oracle”

4

2 回答 2

1

似乎连接对象已在内部命名空间中重命名,作为从先前版本到 v2.1.0 的更新的一部分(:::用于访问内部命名空间,包中不能通过library命令获得的部分)。

不幸的是,对内部命名空间的更改不是 dbplyr更改日志的一部分。但这里有几种方法可以追踪变化:

选项一 - 使用 RStudio 的自动完成功能

开始dbplyr:::在控制台中输入,它将显示一个自动完成选项列表。您可以滚动浏览它或开始输入对象名称以查看可用的内容。我怀疑键入dbplyr:::sql_transl足以将自动完成选项缩小到您需要的选项。

选项二——打开源代码

您可以从包的CRAN 页面下载源代码。这提供了一个包含源代码的 tar.gz 文件。在您的工作目录中下载的文件untar("./dbplyr_2.1.0.tar.gz")将解压缩它并让您检查源代码。

我这样做了,并在源文件 ./dbplyr/R/backend-oracle.RI 中找到了两个您可以尝试的有希望的选项。

  • sql_translation.Oracle在第 60 行
  • sql_translation.OraConnection在第 137 行

使用这种方法最彻底的方法是下载旧版本 dbplyr 包的源代码,找到已重命名的对象,然后与当前版本的源代码进行差异比较。

于 2021-03-08T20:22:06.470 回答
0

原因是 dbplyr 2.0 不再支持 Oracle 11.2g,但“Oracle 翻译现在依赖于 Oracle 12c”(2.0 第 87 行的新闻)。然而,大胆的源代码巫毒魔法似乎绕过了我的问题:

代替

sql_translate_env.OraConnection <- dbplyr:::sql_translate_env.Oracle

经过 sql_translate_env.OraConnection <- dbplyr:::sql_translation.Oracle

代替

sql_select.OraConnection <- dbplyr:::sql_select.Oracle

经过 sql_select.OraConnection <- dbplyr:::sql_query_select.Oracle

代替

sql_subquery.OraConnection <- dbplyr:::sql_subquery.Oracle

经过 sql_subquery.OraConnection <- dbplyr:::sql_query_wrap.Oracle

我通过比较 backend-Oracle.R 的来源猜到了这一点

于 2021-03-13T22:50:41.953 回答