未找到对象 '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
在“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