R编程:ROBC和数据帧



理解如何将数据帧的列值传递给查询时遇到问题?如果我直接传递值,那么查询就可以正常工作。

这些值存储在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 ")

或者使用pastesprintf来构造字符串:

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的更多信息,请查看它们的渐晕

相关内容

  • 没有找到相关文章

最新更新