未找到对象 'sql_translate_env.Oracle'

Object 'sql_translate_env.Oracle' not found

在“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

get(name, envir = asNamespace(pkg), inherits = FALSE) 出错: 未找到对象 'sql_translate_env.Oracle'

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

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

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

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

方案二-打开源代码

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

我在源文件中做到了这一点。/dbplyr/R/backend-oracle.R 我找到了两个看起来很有希望的选项,您可以尝试。

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

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

原因是 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

我是通过对比后端的源码猜到的-Oracle.R