微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找不到对象“sql_translate_env.Oracle”

如何解决找不到对象“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 举报,一经查实,本站将立刻删除。