在工作中,我一直在尝试使用 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 功能方面提供帮助?我已经请求了技术文档(待处理......),但即使我得到了它,我可能在我的理由中遗漏了一些东西。
谢谢!
您不了解 Oracle,您的 IT 人员不了解 R,我既不了解 R,也不了解 Esri(我们稍后会讨论),所以我们举办了一场非常精彩的聚会。
我在互联网上搜索了KEYSET 表。谷歌表示,这些与Esri(地理信息系统软件公司。最出名的是其ArcGIS产品)。
ArcGIS 客户端使用键集表来提高查询性能 (...)
键集表名称的格式如下:
(...)<user_schema>keyset_<process_id>
因此,表名为例如
KEYSET_1344394
看起来像 - KEYSET 后跟可能是进程 ID 的数字。
如果是这样,那么您实际上建立了连接并设法访问表,但是 - 很可能是您并不真正需要的表。
正如我所说: