1

无法理解如何将数据框的列值传递给查询?如果我直接传递值,查询工作正常。

这些值存储在 df$number 中。出于共享目的更改表名称:

dataframe <- sqlQuery(connection, "
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 = df$number ")

我收到错误 [1] "42S22 904 [Oracle][ODBC][Ora]ORA-00904: \"df$number\": invalid identifier\n"

4

3 回答 3

4

gsubfn可以执行准 perl 风格的字符串插值。在任何函数前面加上fn$为该函数的参数打开它:

library(gsubfn)

num <- 3
dataframe <- fn$sqlQuery(connection, 
         "SELECT dimension1 FROM table1 WHERE dimension1 = $num ")

交替使用pasteorsprintf来构造字符串:

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)
于 2015-02-13T20:52:37.917 回答
0
dataframe <- sqlQuery(connection, paste("
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 =",  df$number))
于 2015-02-13T20:52:57.537 回答
0

SQL 语句是一个字符串,因此它无法访问您的数据框的值。要构造一个使用该值的字符串,请使用:

sql.base<-"SELECT dimension1 FROM table1 WHERE dimension1 = "
sql.completed<-paste0(sql.base,df$number)
sqlQuery(connection, sql.completed)

如果您要执行参数化 SQL 查询,即在 中有许多行df,您可以使用逗号分隔符折叠字段值并将它们放在 SQLIN查询中的侧括号中。或者,您可以使用RODBCext允许这样做的包

sqlExecute(connection, "SELECT dimension1 FROM table1 WHERE dimension1 = ?", df$number, fetch = TRUE) 

有关 RODBCext 和此类 SQL 的更多信息,请查看他们的小插图

于 2015-02-13T20:58:08.793 回答