#r #r-dbi
#r #r-dbi
Вопрос:
Я пытаюсь выполнить некоторые параметризованные запросы, используя DBI
пакет dbSendQuery
dbBind
и dbFetch
рабочий процесс.
Я могу использовать dbSendQuery
using ?
в качестве заполнителя для переменной. однако при запуске dbBind
я получаю следующую ошибку:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function 'dbBind' for signature '"Microsoft SQL Server"'
Весь мой код выглядит так:
library(odbc)
library(DBI)
test_connection <- DBI::dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "MyServer",
Database = "MyDataBase")
test_query <- dbSendQuery(test_connection,
"SELECT TOP 2 col1, col2 FROM MyTable WHERE col2 = ?")
dbBind(test_connection,
list('value'))
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function 'dbBind' for signature '"Microsoft SQL Server"'
Кто-нибудь может объяснить мне причину этой ошибки?
Если я жестко прописываю value
в dbSendQuery
инструкции и использую dbFetch
запрос, он работает.
Ответ №1:
Вместо dbBind
объекта подключения следует использовать объект запроса. В вашем примере:
dbBind(test_query, list('value'))
Комментарии:
1. Спасибо, я увидел это решение и подумал: «Очевидно, я не совершал эту ошибку, должно быть, это была опечатка» — оказывается, я сделал. Спасибо, что нашли это в архиве.