函数内部的RMySQL dbGetQuery()会保留挂起的结果

时间:2014-04-02 00:20:12

标签: r rmysql

我的函数包含在一个更大的函数中,使用dbConnect()dbGetQuery()dbDisconnect()

当函数出错时,我修复它并尝试重新运行它。我不能重新运行它,因为我得到:  Error in mysqlCloseConnection(conn, ...) : connection has pending rows (close open results set first)

(注1:我没有使用dbSendQuery() + fetch(),只是dbGetQuery(),所以这本身就是一个奇怪的错误。)
(注2:RMySQL代码中不会出现错误;它们出现在R代码的其他部分。)

解决方案1失败:dbClearResult(dbListResults(myconnection)[[1]])无效,因为在功能环境中创建了myconnection

解决方案2失败:lapply( dbListConnections( dbDriver( drv = "MySQL")), dbDisconnect)错误,上面显示的是“待处理行”错误消息。

我现在唯一的解决办法是杀死R并重新开始。但是,我知道SQL数据库中仍然存在连接(因为我的老板告诉我这样),所以我正在寻找一个合适的解决方案来关闭结果/连接。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我有一个类似的问题,所以它可能会帮助其他人...

pull<- dbSendQuery(con, statement...)
df2 <- fetch(pull, n = -1)
> dbHasCompleted(pull)
[1] TRUE
> dbDisconnect(con)
[1] TRUE