【发布时间】:2018-09-30 21:28:49
【问题描述】:
我正在尝试使用 ROracle 在 R 中处理大量带有参数的查询。我知道每个查询中出现了哪些参数,但我不知道它们出现的顺序。因此,我正在寻找一种在每个查询中按名称提交参数的方法。示例代码:
library(ROracle)
# establish connection to DB
drv <- dbDriver("Oracle")
con <- dbConnect(drv, "User", "password", dbname = "DB")
# create table
createTab <- "create table RORACLE_TEST(num1 number, num2 number)"
dbGetQuery(con, createTab)
# insert String
insStr <- "insert into RORACLE_TEST values(:row1, :row2)"
dbGetQuery(con, insStr, data.frame(row2 = 0, row1 = 1))
# check output
dbGetQuery(con, "SELECT * FROM RORACLE_TEST")
# Output is:
# NUM1 NUM2
#1 0 1
# Desired output should be:
# NUM1 NUM2
#1 1 0
除此类解决方案外,我们将不胜感激任何解决方法
dbGetQuery(con,gsub(":row2", "0", gsub(":row1", "1", insStr)))
因为这不会针对 sql 注入进行清理(参数将来自用户输入)。
【问题讨论】:
-
你试过
sqlInterpolate吗? -
不,在 ROracle 包中寻找解决方案时遇到了困难。谢谢!这是诀窍!仍然很奇怪,这在 ROracle 中是不可能的。
-
使用
sqlInterpolate,您将失去绑定变量使用提供的效率。参考dba-oracle.com/plsql/t_plsql_efficient.htm。