Эта процедура работает из командной строки MySQL как удаленно, так и на локальном хосте и работает при вызове с PHP. Во всех случаях гранты адекватны:Ошибка хранимой процедуры MySQL при вызове из 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
Я пытаюсь вызвать его из 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)
Голый запрос работает нормально. Процедура вызова завершается с
RApache Предупреждение/Ошибка !!! Ошибка в mysqlExecStatement (соед, заявление, ...): драйвер RS-DBI: (может не запустить заявление: ПРОЦЕДУРА myDB.lee_expout не может возвращать результат, установленный в данном контексте)
MySQL docs сказать
Для операторов, которые могут быть определены только во время выполнения, чтобы вернуть результат set, a ПРОЦЕДУРА% s не может вернуть результат в заданной контекстной ошибке .
Можно было бы подумать, что если процедура собирались бросить эту ошибку, он будет выброшен при любых обстоятельствах, а не только от R.
Любые мысли о том, как это исправить?
Вам удалось запустить ваш магазин proc? можете ли вы отметить правильный ответ, который поможет вам? или если ни один из них не делает свой собственный и сам отвечать на него.Поэтому заинтересованные люди могут найти решение здесь. Спасибо – jangorecki
@JanGorecki: Мне не удалось запустить хранимую процедуру. Мне пришлось использовать голый запрос. Это было давно, хотя и, возможно, пакет DB DB теперь лучше хранит процедуры. – dnagirl
Я не использую MySQL, но я запускал SQL-запросы в базах данных Microsoft SQL, используя R. Я заметил, что всякий раз, когда в запросе есть что-то, кроме голого оператора select, процесс выходит из строя. Я не знаю, нужно ли это в MySQL, но попытались ли вы удалить строки «create procedure», «begin» и «end»? – thepule