Я хочу повторно использовать необработанный SQL в сценарии R. Однако в SQL есть привязка переменных, которая позволяет параметризовать запрос .
Есть ли быстрый способ напрямую подставить значения из сеанса R в заполнители переменных привязки при использовании SQL в dbplyr?
Думаю, это не обязательно должен быть dbplyr, но я его использовал.
Напомню, что RMarkdown поддерживает механизм SQL, который позволяет фрагменту с SQL привязать переменные к значениям в среде (Global?). (Найдите текст «Если вам нужно привязать значения переменных R к SQL-запросам» в эту страницу.) Исходя из этого, кажется, что кто-то уже установил способ простой привязки переменных.
Например, приведенный ниже код заставляет программу «Oracle SQL Developer» предлагать мне ввести значение для :param1
при запуске.
select
*
from
( select 'test' as x, 'another' as y from dual )
where x = :param1 and y = :param2
Я хотел бы взять тот же код в R и запустить его с некоторыми параметрами. Это не работает, но я думаю, что это могло бы сработать, если бы для этого была функция:
# Assume "con" is a DB connection already established to an Oracle db.
tbl( con,
args_for_oracle_sql(
"select
*
from
( select 'test' as x, 'another' as y from dual )
where x = :param1 and y = :param2 ",
# Passing the named parameters
param1 = "test",
param2 = "another"
)
)
# Here's another interface idea that is perhaps similar to
# what is shown here for SQL: https://bookdown.org/yihui/rmarkdown/language-engines.html#sql
raw_sql <- "
select
*
from
( select 'test' as x, 'another' as y from dual )
where x = :param1 and y = :param2 "
# Set variables that match parameter names in the current environment.
param1 <- "test"
param2 <- "another"
tbl( con,
exc_with_args_for_oracle_sql(
# Pass raw SQL with the ":param1" markers
sql = raw_sql,
# Pass the function an environment that contains the values
# of the named parameters in the SQL. In this case, the
# current environment where I've set these values above.
env_with_args = environment()
)
)
Кстати, я не уверен, какие из следующих библиотек нужны, но вот что я загружаю:
library(RODBC)
library(RODBCext)
library(RODBCDBI)
library(DBI)
library(dplyr)
library(dbplyr)
library(odbc)