【问题标题】:First argument is not an open RODBC channel第一个参数不是开放的 RODBC 通道
【发布时间】:2019-03-14 06:35:18
【问题描述】:

我正在通过 DNS 连接到 Oracle 数据库(在 tnsnames.ora 上使用名称“database”设置连接)。

我能够成功运行以下代码:

con <- DBI::dbConnect(odbc::odbc(), 
                  "database",
                  UID = "user",
                  PWD = "password",
                  trusted_connection = TRUE)

我还可以通过以下方式成功列出数据库中的所有表:

list <- dbListTables(con)
View(list)

但是,当我运行时:

results <- sqlQuery(channel = con, query = "select * from myschemaname.table")

我得到错误:

Error in sqlQuery(channel = con, query = "select * from myschemaname.table") : 
          first argument is not an open RODBC channel

我拥有所有者权限,并且我还能够更新通过 ODBC 连接到该数据库的 Excel 电子表格。 如果它有任何用处,这里是 str(con) 的输出

str(con)
Formal class 'Oracle' [package ".GlobalEnv"] with 4 slots
  ..@ ptr     :<externalptr> 
  ..@ quote   : chr "\""
  ..@ info    :List of 13
  .. ..$ dbname               : chr ""
  .. ..$ dbms.name            : chr "Oracle"
  .. ..$ db.version           : chr "11.02.0040"
  .. ..$ username             : chr "user"
  .. ..$ host                 : chr ""
  .. ..$ port                 : chr ""
  .. ..$ sourcename           : chr "database"
  .. ..$ servername           : chr "database"
  .. ..$ drivername           : chr "SQORA32.DLL"
  .. ..$ odbc.version         : chr "03.80.0000"
  .. ..$ driver.version       : chr "11.02.0001"
  .. ..$ odbcdriver.version   : chr "03.52"
  .. ..$ supports.transactions: logi TRUE
  .. ..- attr(*, "class")= chr [1:3] "Oracle" "driver_info" "list"
  ..@ encoding: chr ""

【问题讨论】:

  • sqlQuery 来自 RODBC 包。也许您需要ODBC:: 等效的RODBC::sqlQuery() 来使用您的DBI::dbConnect() 连接?
  • 就是这样,非常感谢!我现在成功地使用 con
  • 我会尽快制定答案:)。

标签: r odbc rodbc


【解决方案1】:

另一个上下文,但同样的错误: 如果您的数据库表由数字组成,您首先必须加载 x​​ts 类的对象 (nameofyourtable):

    >library(RODBC)
    >library(DMwR)
    >library(xts)
    >data(nameofyourtable)

【讨论】:

    【解决方案2】:

    所以我有类似的东西连接到 SQL Server 数据库。最后我不得不将 Trusted_Connection=TRUE 更改为 Trusted_Connection=Yes...

    【讨论】:

      【解决方案3】:

      您正在将RODBC::sqlQuery() 用于使用DBI::dbConnect() 创建的连接。将DBI::dbGetQuery()DBI::dbConnect() 一起使用,或者使用RODBC::odbcConnect() 创建一个连接,然后使用RODBC::sqlQuery()

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        • 2016-03-17
        • 2023-02-26
        • 2019-01-22
        • 1970-01-01
        相关资源
        最近更新 更多