Сбой хранимой процедуры MySQL при вызове из R

Эта процедура работает из командной строки MySQL как удаленно, так и на localhost и работает при вызове из 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 Предупреждение / Ошибка !!! Ошибка в

Эта процедура работает из командной строки 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 Предупреждение / Ошибка !!! Ошибка в

Эта процедура работает из командной строки 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: (не удалось оператор запуска: ПРОЦЕДУРА myDB.lee_expout не может вернуть набор результатов в данном контексте)

Документы MySQL говорят

Для операторов, которые могут быть определены только во время выполнения, чтобы вернуть результат установлен, ПРОЦЕДУРА% s не может вернуть результирующий набор в данном контексте ошибки

Можно подумать, что если бы процедура собиралась вызвать эту ошибку, она была бы выброшена при любых обстоятельствах, а не только из R.

Есть какие-нибудь мысли о том, как это исправить?

9
задан dnagirl 30 August 2010 в 09:10
поделиться

1 ответ

Насколько мне известно, вызов процедур SQL из R (dbCallProc) формально еще не реализован (см. справочник от 24 июля 2010 г.: http://cran.r-project.org/web/packages/ RMySQL/RMySQL.pdf)

RMySQL переведен из стиля программирования S3 в S4 и в настоящее время все еще находится в стадии разработки (текущая версия 0.7). Я предлагаю вам задать тот же вопрос в списке рассылки базы данных для R:

https://stat.ethz.ch/mailman/listinfo/r-sig-db

Если это возможно, вам покажут как. Если это не так, они скажут вам, почему.

3
ответ дан 3 November 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: