我已经使用软件包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获取数据并返回数据,并且工作正常,所以我想它与删除有关,但是错误与通道有关,所以我很困惑。
感谢任何可以提供帮助的人!