Este procedimiento funciona desde la línea de comandos de MySQL tanto de forma remota como localhost y funciona cuando se llama desde PHP. En todos los casos las subvenciones son adecuados:El procedimiento almacenado de MySQL falla cuando se llama desde R
CREATE PROCEDURE `myDB`.`lee_expout` (IN e int, IN g int)
BEGIN
select lm.groupname, lee.location, starttime, dark,
inadist,smldist,lardist,emptydur,inadur,smldur,lardur,emptyct,entct,inact,smlct,larct
from lee join leegroup_map lm using (location)
where exp_id= e and std_interval!=0 and groupset_id= g
order by starttime,groupname,location;
END
estoy tratando de llamarlo desde R:
library(DBI)
library(RMySQL)
db <- dbConnect(MySQL(), user="user", password="pswd",
dbname="myDB", host="the.host.com")
#args to pass to the procedure
exp_id<-16
group_id<-2
#the procedure call
p <- paste('CALL lee_expout(', exp_id, ',', group_id,')', sep= ' ')
#the bare query
q <- paste('select lm.groupname, lee.location, starttime, dark,
inadist,smldist,lardist,emptydur,inadur,smldur,lardur,emptyct,entct,inact,smlct,larct
from lee join leegroup_map lm using (location)
where exp_id=',
exp_id,
' and std_interval!=0 and groupset_id=',
group_id,
'order by starttime,groupname,location', sep=' ')
rs_p <- dbSendQuery(db, statement=p) #run procedure and fail
p_data<-fetch(rs_p,n=30)
rs_q <- dbSendQuery(db, statement=q) #or comment out p, run query and succeed
q_data<-fetch(rs_q,n=30)
La consulta al descubierto funciona muy bien. La llamada a procedimiento falla con
RApache Advertencia/Error !!! Error en mysqlExecStatement (conn, declaración, ...): controlador RS-DBI: (no podía correr declaración: PROCEDIMIENTO myDB.lee_expout no puede devolver un resultado establecido en el contexto dado)
el MySQL docs dicen
Para los estados que se pueden determinar solo en el tiempo de ejecución para devolver un resultado establecer, un PROCEDIMIENTO% s no puede devolver un resultado establecido en el error de contexto dado se produce.
Uno podría pensar que si un procedimiento se va a lanzar ese error, que sería lanzado en todas las circunstancias en lugar de sólo de R.
Alguna idea sobre cómo solucionar este problema?
¿se las arregló para ejecutar el proceso de la tienda? ¿Puedes marcar la respuesta correcta que te ayuda? o si ninguno de ellos haces una publicación propia y la respondes.Entonces las personas interesadas pueden encontrar una solución aquí. Gracias – jangorecki
@ JanGorecki: No logré ejecutar el procedimiento almacenado. Tuve que usar la consulta simple. Esto fue hace un tiempo y tal vez el paquete DBI de R sea mejor ahora con los procedimientos almacenados. – dnagirl
No uso MySQL, pero he ejecutado consultas SQL en bases de datos Microsoft SQL utilizando R. Observé que siempre que, en la consulta, hay algo más que la instrucción de selección vacía, el proceso falla. No sé si es necesario en MySQL, pero ¿ha intentado eliminar las líneas "crear procedimiento", "comenzar" y "finalizar"? – thepule