В этом ответе не используется пакет oraConnect
, но его можно использовать для подключения к Oracle базам данных, если на вашем компьютере настроено соединение odb c.
Подключение
Сначала загрузите пакеты и подключитесь к базе данных
library(odbc)
library(DBI)
con <- dbConnect(odbc(), 'YOUR_DSN')
После установки соединения вы можете выполнить быстрый тестовый запрос. Я использую SendQuery, Fetch и Clear. Вам не нужно этого делать, но это позволяет избежать некоторых конфликтов и т. Д. c и упрощает обработку больших объемов данных. Обратите внимание, что «имя_схемы» - это имя схемы в вашей базе данных, если требуется.
query <- DBI::dbSendQuery(con, "SELECT * FROM schema_name.table WHERE ROWNUM <= 10")
out <- DBI::dbFetch(query)
DBI::dbClearResult(query)
Объект out
будет содержать ваши данные.
Автогенерация запросов
Теперь это где я буду использовать glue
пакет
library(glue)
dat <- c("apples", "pears", "oranges")
(my_new_query <- glue("SELECT * FROM schema_name.table_name WHERE id = {dat}"))
# SELECT * FROM schema_name.table_name WHERE id = apples
# SELECT * FROM schema_name.table_name WHERE id = pears
# SELECT * FROM schema_name.table_name WHERE id = oranges
или что-то вроде
table_1 <- "cities"
table_2 <- "states"
(my_new_query <- glue("SELECT a.* FROM schema_name.{table_1} LEFT JOIN schema_name.{table_2} ON..."))
#SELECT a.* FROM schema_name.cities LEFT JOIN schema_name.states ON...
, которые вы затем можете отправить в свою базу данных
query <- DBI::dbSendQuery(con, my_new_query)
out <- DBI::dbFetch(query)
DBI::dbClearResult(query)
Вы можете также добавьте в операторы glue
такие вещи, как составление списка.
dat <- c("apples", "pears", "oranges")
(my_new_query <- glue("SELECT * FROM schema_name.table_name WHERE id = IN({glue_collapse(dat, sep = ',')})"))
#SELECT * FROM schema_name.table_name WHERE id = IN(apples,pears,oranges)
, таким образом, все может быть расширено.