全球环境中的RODBC通道错误

时间:2018-11-21 09:35:09

标签: r postgresql postgresql-9.5 rodbc

我已经使用软件包RODBC在R和SQL之间建立了连接,并设法从R连接和查询数据库。

我创建了一个小的R函数,其目的是删除特定表中的某些行(作为参数)。

这里是(nameDB是我的数据库的名称,而values_conversion是我执行的另一个将R格式的数据转换为SQL格式的函数):

delete_SQL = function(data, table){
  ch = odbcConnect(nameDB,"postgres")
  names = sqlColumns(channel=ch,table,schema="public",catalog = nameDB)$COLUMN_NAME
  for(i in 1:nrow(data)){
    sqlQuery(channel=ch,query=paste0("DELETE FROM public.\"",table,"\" WHERE ",
                       paste0(names," = ",values_conversion(data[i,]),collapse = " and "),";"),errors = TRUE)
  }
  odbcCloseAll()
}

查询示例:“从公共位置删除。\“ lieu_protection \”,lieu_id = 3,protection_id = 1430;“

当我直接执行所有操作时,此函数中的代码可以正常工作,但是当我调用该函数时,它将引发一个

Error in sqlQuery(channel = ch, query = paste0("DELETE FROM public.\"",  : 
  first argument is not an open RODBC channel

我有一个类似的功能,可以从SQL获取数据并返回数据,并且工作正常,所以我想它与删除有关,但是错误与通道有关,所以我很困惑。

感谢任何可以提供帮助的人!

0 个答案:

没有答案