R 编程:RODBC 和数据框
R programming: RODBC and dataframe
无法理解如何将数据框的列值传递给查询?如果我直接传递值,查询工作正常。
这些值存储在 df$number 中。出于共享目的更改了表名:
dataframe <- sqlQuery(connection, "
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 = df$number ")
我收到错误 [1]“42S22 904 [Oracle][ODBC][Ora]ORA-00904:\"df$number\":无效 identifier\n”
gsubfn package可以进行准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)
有关 RODBCext 和此类 SQL 的更多信息,请查看 their vignette
无法理解如何将数据框的列值传递给查询?如果我直接传递值,查询工作正常。
这些值存储在 df$number 中。出于共享目的更改了表名:
dataframe <- sqlQuery(connection, "
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 = df$number ")
我收到错误 [1]“42S22 904 [Oracle][ODBC][Ora]ORA-00904:\"df$number\":无效 identifier\n”
gsubfn package可以进行准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)
有关 RODBCext 和此类 SQL 的更多信息,请查看 their vignette