理解如何将数据帧的列值传递给查询时遇到问题?如果我直接传递值,那么查询就可以正常工作。
这些值存储在df$number中。更改表名是为了共享:
dataframe <- sqlQuery(connection, "
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 = df$number ")
我得到错误[1]"42S22 904[Oracle][ODBC][Ora]Ora-00904:\"df$number\":无效标识符\n"
gsubfn包可以执行准perl风格的字符串插值。在任何函数前面加上fn$
,以便为该函数的参数打开它:
library(gsubfn)
num <- 3
dataframe <- fn$sqlQuery(connection,
"SELECT dimension1 FROM table1 WHERE dimension1 = $num ")
或者使用paste
或sprintf
来构造字符串:
sql <- paste("SELECT dimension1 FROM table1 WHERE dimension1 =", num)
sqlQuery(connection, sql)
或
sql <- sprintf("SELECT dimension1 FROM table1 WHERE dimension1 = %d", num)
sqlQuery(connection, sql)
dataframe <- sqlQuery(connection, paste("
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 =", df$number))
SQL语句是一个字符串,因此它无法访问数据帧的值。要构造使用值的字符串,请使用:
sql.base<-"SELECT dimension1 FROM table1 WHERE dimension1 = "
sql.completed<-paste0(sql.base,df$number)
sqlQuery(connection, sql.completed)
如果您希望执行参数化SQL查询,即df
中有多行,则可以使用逗号分隔符折叠字段值,并将它们放在SQL IN
查询的侧括号中。或者,您可以使用包RODBCext
,它将允许像一样进行操作
sqlExecute(connection, "SELECT dimension1 FROM table1 WHERE dimension1 = ?", df$number, fetch = TRUE)
有关RODBText和这种类型的SQL的更多信息,请查看它们的渐晕