2014-12-22 8 views
0

RMySQL을 사용하는 dbConnect 내의 SQL 문으로 명령 줄의 Rscript에서 정수로 사이트 ID 인수를 전달하려고합니다. 그러나"mysqlQuickSQL의 오류 (conn, statement, ...) : 사용하지 않은 인수 ("3 ", AND name = 'HVAC# 1 공급 온도'ORDER BY created DESC LIMIT 15;)"R - Rscript를 사용하여 RMySQL dbConnect를 사용하는 쿼리에 명령 줄 인수를 전달할 수 있습니까?

[email protected]:~$ Rscript deltaTsql.R 3 

은 내가 명령 프롬프트에서 실행하고있는 것입니다.

내 스크립트 내가이 사이트 ID에 그들을 병합하기 전에 개별적으로 모두를 잡아 수 있도록 두 개의 분리 된 SQL 문에 같은 인수를 전달할 수 있도록하려면

library(RMySQL,quietly=TRUE) 
library(rjson,quietly=TRUE) 

args <- commandArgs(TRUE) 
print(length(args)) 
as.integer(args[1]) 

con <- dbConnect(MySQL(), user="user", password="password", dbname="dbname", host="host") 

r1.dat <- dbGetQuery(con, "SELECT `site_id`,`name`,`value`,`created` FROM `table` WHERE `site_id` = ", args[1], " AND `name` = 'HVAC#1 Supply Temp' ORDER BY `created` DESC LIMIT 15;") 
r2.dat <- dbGetQuery(con, "SELECT `site_id`,`name`,`value`,`created` FROM `table` WHERE `site_id` =", args[1], " AND `name` = 'HVAC#1 Return Temp' ORDER BY `created` DESC LIMIT 15;") 

r <- merge(r1.dat,r2.dat,by=c("created","site_id")) 

r$supplytemp <- (r$value.x*(9/5)+32) 
r$returntemp <- (r$value.y*(9/5)+32) 

r$deltaT <- (r$returntemp-r$supplytemp) 
deltaT <- r$deltaT 

deltaTcheck <- function(deltaT) { 
if (deltaT>25) { 
return(1) 
} 
else if (deltaT<10) { 
return(-1) 
} 
else { 
return(0) 
} 
} 

deltaTout <- vapply(deltaT, deltaTcheck, numeric(1)) 
deltaTjson <- toJSON(deltaTout) 
deltaTjson 

입니다. 어떤 도움이나 피드백이라도 대단히 감사하겠습니다. 감사합니다

당신은 하나의 문자 값으로 함께 paste() SQL 문에 필요

답변

1

r1.dat <- dbGetQuery(con, paste0("SELECT `site_id`,`name`,`value`,`created` 
    FROM `table` 
    WHERE `site_id` = ", args[1], " AND `name` = 'HVAC#1 Supply Temp' 
    ORDER BY `created` DESC LIMIT 15;")) 
+0

매개 변수화 쿼리를 사용하는 것이 더 안전 할 것 – hadley