sql - as.character(query) 中的错误:无法将类型“闭包”强制转换为“字符”类型的向量
问题描述
我试图从 oracle 数据库中加载一些数据,在此过程中,每一行代码都很好,直到我尝试运行最后一行:
df<- sqlQuery(sql_connection,sql_statement,stringsAsFactors=0)
,标题中出现错误。
所以这是我的代码的基本结构:
require(RODBC)
require(lubridate)
require(stringr)
require(dplyr)
require(tidyr)
#server for N2 purge attribute
target <- "xxxx"
user <- "xxxx"
pass <- "xxxx"
#print("Working on lot history...")
sql_string <- paste0("select
xxxx
from
xxxx
where
xxxx
")
sql_statement <- sprintf
#sql_statement <- sprintf(sql_string, BackDate, DidList[m])
sql_connection <- odbcConnect(dsn = target, uid = user, pwd = pass,believeNRows=FALSE)
df<- sqlQuery(sql_connection,sql_statement,stringsAsFactors=0)
因为我是 R 新手,所以我觉得我无法判断错误的原因在哪里。如果有人可以帮助我解决这个问题,我将不胜感激。
解决方案
在这一行中,您将基本功能分配sprintf
给sql_statement
:
sql_statement <- sprintf
然后将其sqlQuery()
作为第二个参数 ( query
) 传递给:
df<- sqlQuery(sql_connection,sql_statement,stringsAsFactors=0)
该函数期望query
是一个字符,因此您会得到错误,即 R 无法将“闭包”(本质上是函数的另一个名称)强制转换为字符。
我假设您试图模仿这条注释掉的行:
#sql_statement <- sprintf(sql_string, BackDate, DidList[m])
但是,如果您只想运行刚刚编写的查询,则没有必要。因此,如果我们只是整理您的代码以便sql_string
直接传递给sqlQuery()
,它应该可以按预期工作,尽管我无法实际测试它,因为我们无权访问您的数据库:
require(RODBC)
require(lubridate)
require(stringr)
require(dplyr)
require(tidyr)
#server for N2 purge attribute
target <- "xxxx"
user <- "xxxx"
pass <- "xxxx"
#print("Working on lot history...")
sql_string <- paste0("select
xxxx
from
xxxx
where
xxxx
")
sql_connection <- odbcConnect(dsn = target, uid = user, pwd = pass,believeNRows=FALSE)
df<- sqlQuery(sql_connection,sql_string,stringsAsFactors=0)
推荐阅读
- python - 按比例python过滤和删除行
- html - 是什么导致我的 CSS Accordion 不下拉?
- android-studio - Android Studio 非常慢的 lint
- javascript - Vue-auth 在 vuex 操作中访问 $auth
- css - 属性可通过动画更改,可通过 [attribute=value] 访问
- javascript - 当输入流管道传输到多个输出流时,缓冲区级别会发生什么?
- python - 内置 python 函数的时间/空间复杂度
- hadoop - kylin java.io.IOException:操作系统命令错误退出,返回码:137
- javascript - 将 html 表添加到 html 表单并保存到同一个文件
- html - 是否需要多个图标大小?