使用R的DBI
,我需要:
1.运行具有不同参数(即,参数向量)的参数化查询;
1.获得连接的结果集(即按照R术语rbind
ed或按照SQL术语union
ed);
1.并在数据库中获取结果表以供进一步操作。dbBind
/dbGetquery
满足要求1和2,但是我需要使用dbWriteTable
将结果 Dataframe 写入数据库,这是低效的:
library(DBI)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbWriteTable(con, "iris", iris)
res <- dbGetQuery(con,
"select * from iris where Species = ?",
params = list(c("setosa", "versicolor")))
dbWriteTable(con, "mytable", res)
相反,dbExecute
满足了需求3,但我不认为它具有"rbind
特性"。当然,这会抛出一个错误,因为表会被覆盖:
dbExecute(con,
"create table mytable as select * from iris where Species = ?",
params = list(c("setosa", "versicolor")))
最有效/推荐的方法是什么?
注:
- 我不是DBA,只能通过R访问数据库。
- 我的例子太琐碎了,可以在单个查询中实现。我的用例实际上需要使用不同的参数多次运行参数化查询。
- 我必须使用Oracle,但我对解决方案感兴趣,即使它不适用于Oracle。
1条答案
按热度按时间toe950271#
**1)**使用第一个参数创建表,然后将其他参数插入其中。
**2)**或者生成SQL语句的文本来完成所有工作。sqldf拉入RSQLite和gsubfn,后者提供fn$来启用文本替换。