R 编程:RODBC 和数据框
Posted
技术标签:
【中文标题】R 编程:RODBC 和数据框【英文标题】:R programming: RODBC and dataframe 【发布时间】:2015-02-13 20:45:39 【问题描述】:无法理解如何将数据框的列值传递给查询?如果我直接传递值,查询就可以正常工作。
这些值存储在 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"
【问题讨论】:
【参考方案1】: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)
【讨论】:
【参考方案2】:dataframe <- sqlQuery(connection, paste("
+ SELECT
+ dimension1,
+ FROM
+ table1,
+ WHERE
+ dimension1 =", df$number))
【讨论】:
【参考方案3】: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
【讨论】:
参数化正是我们所需要的! RODBCext 正是我们所需要的。以上是关于R 编程:RODBC 和数据框的主要内容,如果未能解决你的问题,请参考以下文章
来自 RODBC 的 sqlSave 仅在 R 中保存日期的年份
如何在 R 中使用 RODBC 在 MS Access 中执行查询?
RODBC :: sqlSave()创建表,警告:在列中截断为255个字节?