可以通过R连接到Oracle DB,但无法获取数据

问题描述 投票:0回答:1

在工作中,我一直在尝试使用 R 连接到 Oracle 数据库。我已获得凭据,并且成功地成功连接(使用 32 位 R 版本):

library(odbc)
library(DBI)

con <- odbc::dbConnect(drv = odbc::odbc(), driver = "Oracle dans OraClient12Home1_32bit", 
                        DBQ = "<dbq>", Uid = "<uid>", 
                        PWD = "*****")

然后我尝试列出表格,但最终得到了数百个

"KEYSET_100", "KEYSET_101", etc.
表格:

objects <- DBI::dbListObjects(con)
objects

                           table is_prefix
1    <Id> table = KEYSET_1344394     FALSE
2   <Id> table = KEYSET_31246508     FALSE
3   <Id> table = KEYSET_15797611     FALSE
4   <Id> table = KEYSET_31246691     FALSE

这无助于识别什么是什么,更糟糕的是,如果我尝试阅读这些表格中的任何一个,我最终会得到如下所示的内容,它不会回显任何有意义的数据:

> dbReadTable(con, "KEYSET_1344394")
[1] KEYSET_ID LONG_VAL  STR_VAL   DBL_VAL   DATE_VAL 
<0 lignes> (ou 'row.names' de longueur nulle)

但是,在 RStudio“连接”窗格中,我看到一些有意义的表名称,它们按某种层次结构排序。

当我尝试直接访问这些时,我最终遇到了一些错误(DGZ 将是 DGZ_ROAD_TABLE 可用的“子文件夹”:

sql = 'SELECT * FROM DGZ.DGZ_ROAD_TABLE'
DBI::dbGetQuery(con, sql)

Error: nanodbc/nanodbc.cpp:2809: HY000: [Oracle][ODBC][Ora]ORA-24359: OCIDefineObject n'a pas été appelé pour un type d'objet ou une référence
 
Warning message:
In dbClearResult(rs) : Result already cleared

知道我应该做什么才能成功吗?

我一直在阅读有关什么是方案等的内容,但无法找到将这些知识与我当前的问题联系起来的方法。我应该向我的 IT 部门询问什么,因为他们并不具体了解 R 并且无法在 R 功能方面提供帮助?我已经请求了技术文档(待处理......),但即使我得到了它,我可能在我的理由中遗漏了一些东西。

谢谢!

r database odbc dbi
1个回答
0
投票

您不了解 Oracle,您的 IT 人员不了解 R,我既不了解 R,也不了解 Esri(我们稍后会讨论),所以我们举办了一场非常精彩的聚会。


我在互联网上搜索了KEYSET 表。谷歌表示,这些与Esri地理信息系统软件公司。最出名的是其ArcGIS产品)。

ArcGIS 客户端使用键集表来提高查询性能 (...)

键集表名称的格式如下:

<user_schema>keyset_<process_id>
(...)

因此,表名为例如

KEYSET_1344394
看起来像 - KEYSET 后跟可能是进程 ID 的数字。

如果是这样,那么您实际上建立了连接并设法访问表,但是 - 很可能是您并不真正需要的表。


正如我所说:

  • 我不懂 R,所以我不知道如何过滤表格。
    • 你呢?如果是,您可以 - 例如 - 过滤掉所有 KEYSET 表,以便获得所有其他表的列表吗?
    我不了解 Esri 或 ArcGIS,所以我不知道为什么这些临时表仍然存在(数百个!)。我希望当不再需要它们时应该将它们删除......另一方面,也许它们
  • 仍然
  • 仍在使用。我很无知,我知道。
我知道这并不是你问题的真正答案,但太多了,无法发表评论。如果没用,我就删除;这么说吧。

© www.soinside.com 2019 - 2024. All rights reserved.