经过漫长的故障排除过程,我终于让RStudio使用即时客户端连接到我的works数据库。这样做的动机是使用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)'我以为这和司机有关。我的工作使用了Oracle12.2,它为标识符设置了更大的上限,但是dbGetQuery在实例化客户机上工作得很好
没有dbplyr的工作示例
dbGetQuery(con,'
select "a_column"
from
long_shcema_name.very_long_and_descriptive_name')a_column
1
0
2
.
.
.这给了我想要的结果。
有解决办法吗?
我有点烦。我用了将近三个星期的时间使用即时客户端建立了与我的works数据库的odbc连接。我能够从get开始使用RODBC和ROracle进行查询,但我想使用dplyr。结果失败了,我没有足够的精力去弄清楚原因了。在这一点上,任何帮助都将是非常感谢的。
发布于 2020-01-11 04:35:49
这个问题很可能不是很长的文件名(除非您的表名超过30个字符,请参见here),而是使用模式。Oracle可以使用双引号来标识数据库、架构和表名(ref)。方括号有时也用于此目的(ref)。
查看生成错误消息的SQL:
SELECT *
FROM ("long_schema_name.very_long_and_descriptive_name") "zzz7"
WHERE (0 = 1)这很可能被解释为:
{default}
而不是作为:
{default}
作为@Wil注释,您可以使用in_schema函数来解决这个问题。如果你尝试:
test <- tbl(con, in_schema("long_schema_name","very_long_and_descriptive_name") %>%
select(a_column)然后show_query(test)应该返回:
SELECT *
FROM ("long_schema_name"."very_long_and_descriptive_name") "zzz7"
WHERE (0 = 1)请注意,这与第一个查询的不同之处在于添加了句号两边的双引号。
https://stackoverflow.com/questions/59690605
复制相似问题