この手順は、リモートとローカルホストの両方で MySQL コマンドラインから機能し、PHP から呼び出されたときに機能します。すべての場合において、助成金は適切です。
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(conn、ステートメント、...) のエラー: RS-DBI ドライバー: (ステートメントを実行できませんでした: PROCEDURE myDB.lee_expout は、指定されたコンテキストで結果セットを返すことができません)
MySQLのドキュメントによると
実行時にのみ結果セットを返すと判断できるステートメントの場合、PROCEDURE %s can't return a result set in the given context エラーが発生します。
プロシージャがそのエラーをスローする場合、R からだけでなく、すべての状況でスローされると考える人もいるでしょう。
これを修正する方法について何か考えはありますか?