r - 带有原生 R 对象的 SQL 语句
问题描述
我正在使用从 R 查询的 Oracle SQL 数据库。是否可以在语句中使用本机 R 对象查询 Oracle DB,例如将 DB 表连接到数据框?
设置where
条件在 R 中很好地工作,如下所示:
oraConnect::load_from_db(sprintf('select * from dual where DUMMY = %s', 'X'))
例如,是否有可能通过将 R 对象插入到 oracle SQL 语句中来将 DB 数据表连接到 R 数据表(不能像所写的那样工作)?:
testdf = data.frame(DUMMY = 'X')
oraConnect::load_from_db(sprintf('select DUMMY from dual join %s rdf on dual.DUMMY = rdf.DUMMY', testdf))
解决方案
此答案不使用该oraConnect
软件包,但只要您在计算机上设置了 odbc 连接,就可以用于连接到 Oracle 数据库。
连接
首先加载包并连接到数据库
library(odbc)
library(DBI)
con <- dbConnect(odbc(), 'YOUR_DSN')
设置好连接后,您可以进行快速测试查询。我使用 SendQuery、Fetch 和 Clear。您不必这样做,但它避免了一些冲突等,并使处理更大的数据拉取更容易。请注意,如果需要,“schema_name”是数据库中的模式名称。
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)
因此一切都可以扩展。
推荐阅读
- java - 如何在 Spring Boot 中使用 JPA 中的 Criteria?
- c# - 如何在 C# 中读取所有用户会议
- dataframe - 在 Julia 中绘制时间序列点的子集
- firebase - Flutter 和 Firebase。数据更改时重建小部件。错误的代码或错误的数据库?
- node-red - 节点红色 CBOR 标记的 JSON 过滤器
- go - 如果修改信号处理程序中的 ctx.rip 和 ctx.rsp 会发生什么
- python - 未在 SQL 数据库中插入 GUI 文本输入字段
- javascript - Redux 显示不正确的项目成本负值
- sql - 使用多个值执行 SQL 查询
- r - R:如何通过添加值合并更多 2 个数据框?