2016-03-15 13 views
6

Sto usando RMySQL e DBI per il collegamento tra R e MySQLEseguire comandi SQL multipli contemporaneamente su R

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

tutto funziona bene per un comando, ad esempio

sql = "select * from clients" 
con <- dbConnect(MySQL(),user=user, password=password, dbname=dbname, host=host) 
rs <- dbSendQuery(con, sql) 
data <- fetch(rs, n=-1) 
huh <- dbHasCompleted(rs) 
dbClearResult(rs) 
on.exit(dbDisconnect(con)) 

Tuttavia, quando voglio eseguire più comandi con ";" tra di loro (come per impostare un parametro), restituisce l'errore. Per esempio

sql = "SET @LAST_TEN_DAY = DATE_ADD(NOW(), INTERVAL -10 DAY); select * from clients where date > @LAST_TEN_DAY" 
con <- dbConnect(MySQL(),user=user, password=password, dbname=dbname, host=host) 
rs <- dbSendQuery(con, sql) 
data <- fetch(rs, n=-1) 
huh <- dbHasCompleted(rs) 
dbClearResult(rs) 
on.exit(dbDisconnect(con)) 

Molte grazie,

+0

Non è possibile SQL e R. Devi creare una variabile che contenga il valore di 'DATE_ADD (NOW(), INTERVAL, -10 DAY)' e quindi usa la query SQL 'SELECT * FROM CLIENTS WHERE DATE> your variable value' – MaxPD

+0

Ciao Max, grazie per segreteria. Posso sapere come farlo in R? Perché se si esegue un comando SQL per la creazione di una variabile, non sono sicuro che tale variabile verrà mantenuta per la successiva esecuzione del comando SQL. –

+0

La variabile sarà globale e può essere utilizzata per qualsiasi istruzione sql all'interno del codice R. – MaxPD

risposta

6

Per più comandi che abbiamo bisogno di lavorare come segue. DbSendQuery salverà il parametro

sql = "select * from clients where date > @LAST_TEN_DAY" 
con <- dbConnect(MySQL(),user=user, password=password, dbname=dbname, host=host) 
dbSendQuery(con, 'SET @LAST_TEN_DAY = DATE_ADD(NOW(), INTERVAL -10 DAY)') 
rs <- dbSendQuery(con, sql) 
data <- fetch(rs, n=-1) 
huh <- dbHasCompleted(rs) 
dbClearResult(rs) 
on.exit(dbDisconnect(con))