如何解决找不到对象“sql_translate_env.Oracle”
在“updateR”“update.packages”之后,我与 Oracle 11.2g express 的 ROracle 连接在带有 dbplyr_2.1.0 的 R 4.0.4 下停止运行。 具体代码为
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
我是通过对比backend-Oracle.R的来源猜到的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。