【问题标题】:Using ODBC::dbConnect and dplyr to connect to Sybase IQ database - table name not found使用 ODBC::dbConnect 和 dplyr 连接到 Sybase IQ 数据库 - 未找到表名
【发布时间】:2020-07-04 00:06:23
【问题描述】:

我可以使用如下连接字符串连接到我的 Sybase IQ 16 数据库:

myDB_conn <- dbConnect(odbc(), "MyDSN_Name")

当我运行此命令时,连接视图会显示数据库列表和相应的表/视图。然而,当我尝试使用 here 专门命名视图的逻辑时,我不断收到关于我的视图未找到的错误。

test <- tbl(myDB_conn, "OFFSHORE_BOB.SOME_VIEW_OR_TABLE_NAME")

在连接窗口中我可以看到数据库和视图,但是当我使用上面的代码时,我收到一个未找到的表名。

nanodbc/nanodbc.cpp:1374: 42S02: [Sybase][ODBC Driver][Sybase IQ]Table 'OFFSHORE_BOB.SOME_VIEW_OR_TABLE_NAME' not found

我还查看了列出 OFFSHORE_BOB 模式中的表,我可以在其中看到感兴趣的表:

y <- dbListTables(gopher_conn, schema = 'OFFSHORE_BOB')

然后我搜索了感兴趣的视图,我可以在那里看到它,所以我很困惑为什么我不能使用这个代码

test <- tbl(myDB_conn, "OFFSHORE_BOB.SOME_VIEW_OR_TABLE_NAME")

任何建议将不胜感激。

【问题讨论】:

  • 什么是OFFSHORE_BOB?数据库或模式?如果是数据库,则连接通常直接连接到数据库,因此不需要此期间限定名称。如果是架构,请查看in_schema()
  • 试试tbl(myDB_conn, "SOME_VIEW_OR_TABLE_NAME", schema("OFFSHORE_BOB"))
  • @r2evans 我尝试了你的建议,但我得到了同样的错误。感谢您的建议。

标签: r dplyr odbc dbplyr


【解决方案1】:

您很可能需要来自 dbplyr 的 in_schema 命令。例如:

schema = "OFFSHORE_BOB"
tbl_name = "SOME_VIEW_OR_TABLE_NAME"

remote_table <- tbl(db_connection, from = in_schema(schema, tbl_name))

然后show_query(remote_table) 应该返回类似:

SELECT *
FROM "OFFSHORE_BOB"."SOME_VIEW_OR_TABLE_NAME"

(如果您的表或模式名称包含非标准字符,则 dbplyr 会插入引号。例如,abc-1233-4 本身不是可接受的表名,但引用 "abc-123""3-4" 它们可以是表名或模式名。)

请注意,如果需要,您还可以在架构名称中包含数据库名称:

remote_table <- tbl(db_connection, from = in_schema(paste0(db,".",schema), table_name))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 2011-08-22
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2016-07-26
    • 2015-01-15
    相关资源
    最近更新 更多