2016-03-15 13 views
6

I RMySQL und DBI für die Verbindung zwischen R und MySQL bin mitAusführen mehrere SQL sofort Befehle auf R

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

Alles funktioniert für einen Befehl in Ordnung, wie

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)) 

jedoch wenn ich mehrere Befehle mit ";" zwischen ihnen (z. B. um einen Parameter zu setzen), gibt es einen Fehler zurück. Zum Beispiel

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)) 

Vielen Dank,

+0

Sie können SQL und R nicht so. Sie müssen eine Variable erstellen, die den Wert von 'DATE_ADD (NOW(), INTERVAL, -10 DAY) enthält und dann die SQL-Abfrage' SELECT * FROM CLIENTS WHERE DATE> Ihren Variablenwert verwendet. – MaxPD

+0

Hi Max, danke für antwortend. Darf ich wissen, wie man das in R macht? Wenn Sie einen SQL-Befehl zum Erstellen einer Variablen ausführen, bin ich nicht sicher, ob diese Variable für die nächste SQL-Befehlsausführung beibehalten wird. –

+0

Die Variable wird global sein und kann für jede SQL-Anweisung in Ihrem R-Code verwendet werden. – MaxPD

Antwort

6

für mehrere Befehle müssen wir wie folgt arbeiten. Die dbSendQuery speichert den Parameter

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)) 
Verwandte Themen