Параметрирование данных очень важно - особенно с точки зрения безопасности. Примеры, которые у вас есть, представляют собой конкатенации строк и подвержены SQL-инъекциям.
Пакет RODBCext
имеет поддержку для параметризации.
Первый - стандартный синтаксис SQL параметризация:
SELECT ColA, ColB FROM MyTable where FirstName = ? and LastName = ?
Каждый ?
знак указывает на то, чтобы значения, которые будут появляться в векторе. Этот синтаксис верен для ODBC независимо от платформы. Другие распространились на позицию поддержки. например. OLEDB поддерживает @P1
, @P2
и т. Д.
Возможно, это не важно для ваших запросов R - в многопользовательской системе параметризованные запросы выполняются быстрее, поскольку план запросов хранится сервером базы данных (как для Oracle, так и для SQL Server) ,
полу-плагиатом из документации:
library(RODBCext)
connHandle <- odbcConnect("myDatabase")
data <- sqlExecute(connHandle, "SELECT * FROM myTable WHERE column = ?", 'myValue', fetch = TRUE)
odbcClose(connHandle)
Документация находится здесь: https://cran.r-project.org/web/packages/RODBCext/vignettes/Parameterized_SQL_queries.html
Более подробное обсуждение здесь: Parameterized queries with RODBC