Ошибка канала RODBC в глобальной среде - PullRequest
0 голосов
/ 21 ноября 2018

Я установил соединение между R и SQL, используя пакет RODBC, и мне удалось подключиться и запросить базу данных из 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 и работает нормально, поэтому я думаю, что это как-то связано с удалением, но ошибка заключается вканал, так что я в замешательстве.

Спасибо всем, кто может помочь!

...