【发布时间】:2020-04-28 15:08:13
【问题描述】:
经过漫长的故障排除过程,我终于让 RStudio 使用即时客户端连接到我的工作 Oracle 数据库。这样做的动机是使用 dbplyr 来完成我的大部分查询。但是,我无法通过 dbplyr 发送任何查询,因为所有列名和表名都很长,导致 ORA-00972: identifier is too long.
示例错误
test <- tbl(con, "long_shcema_name.very_long_and_descriptive_name") %>%
select(a_column)
Error: nanodbc/nanodbc.cpp:1617: 42000: [Oracle][ODBC][Ora]ORA-00972: identifier is too long
<SQL> 'SELECT *
FROM ("long_shcema_name.very_long_and_descriptive_name") "zzz7"
WHERE (0 = 1)'
我认为问题与驱动程序有关。我的工作使用 Oracle 12.2,它对标识符有更大的上限,但 dbGetQuery 在 Instantclient 上运行良好
没有 dbplyr 的工作示例
dbGetQuery(con,'
select "a_column"
from
long_shcema_name.very_long_and_descriptive_name')
a_column
1
0
2
.
.
.
这给了我想要的结果。
是否存在解决方案?
我有点生气。我花了将近三周的时间才使用即时客户端与我的作品数据库建立了 odbc 连接。我能够从一开始就使用 RODBC 和 ROracle 进行查询,但我想使用 dplyr。它最终不起作用,我没有太多的果汁来找出原因。在这一点上,任何帮助将不胜感激。
【问题讨论】:
-
我是否正确理解第二种解决方案对您有效,但您不能为此使用 dbplyr?你能通过管道
get_query()来检索 SQL 代码吗? -
我以前遇到过这种情况,有时(并非总是)使用in_schema 函数有效。我想对你来说它会像
tbl(con, in_schema("long_shcema_name”, “very_long_and_descriptive_name")) -
in_schema 函数正在工作。你知道什么时候它不起作用吗?我通常会尝试在连接字符串中指定模式,所以我想知道是否可以在 odbc 和 dbplyr 之间引入更多兼容性。
标签: r oracle dplyr odbc dbplyr