如何从R调用存储在Oracle数据库上的PL/SQL过程

如何从R调用存储在Oracle数据库上的PL/SQL过程,r,oracle,stored-procedures,plsql,R,Oracle,Stored Procedures,Plsql,我正在Windows7下运行以下版本的R R version 3.0.1 (2013-05-16) -- "Good Sport" Copyright (C) 2013 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 (64-bit) 使用libraryRODBC channel <- odbcConnect(dsn = "database") ProcExec <- "exe

我正在Windows7下运行以下版本的R

R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)
使用libraryRODBC

channel <- odbcConnect(dsn = "database")

ProcExec <- "execute LENGTHCOMP(2004)"  
# the procedure returns nothing, but creates a series of Oracle tables needed later in the R function
sqlQuery(channel = channel, query = ProcExec, believeNRows = FALSE)

odbcClose(channel)
ROracle图书馆2013年8月表示

dbCallProc方法 调用SQL存储过程 描述 尚未实施


他们的其他R包是否提供了调用Oracle上存储的PL/SQL过程的功能?或者有没有一种方法可以让sqlQuery从RODBC包中执行此操作?

使用ROracle,我成功地创建了一个PLSQL函数来包装过程调用:

create or replace function Wrapper_func (Sql_in in varchar2)
  return number
  authid current_user
as
  pragma autonomous_transaction;
begin
  execute immediate Sql_in;
  return 0;
exception
  when others then
    return sqlcode;
end Wrapper_func;
这是我从R打来的电话:

sqldata<-dbGetQuery(con, "select wrapper_func ('begin proc_t(137); end;') from dual")
如果procedurecall成功,函数返回0;如果procedurecall失败,函数返回错误代码。该过程需要作为当前用户运行,因为它将执行给定给它的任何sql


正确的方法可能是使用与procedurecall签名匹配的特定函数调用包装所有procedurecall。这些函数不需要是当前用户,因为它们只传递参数

使用ROracle,我成功地创建了一个PLSQL函数来包装过程调用:

create or replace function Wrapper_func (Sql_in in varchar2)
  return number
  authid current_user
as
  pragma autonomous_transaction;
begin
  execute immediate Sql_in;
  return 0;
exception
  when others then
    return sqlcode;
end Wrapper_func;
这是我从R打来的电话:

sqldata<-dbGetQuery(con, "select wrapper_func ('begin proc_t(137); end;') from dual")
如果procedurecall成功,函数返回0;如果procedurecall失败,函数返回错误代码。该过程需要作为当前用户运行,因为它将执行给定给它的任何sql


正确的方法可能是使用与procedurecall签名匹配的特定函数调用包装所有procedurecall。这些函数不需要是当前用户,因为它们只传递参数

我尝试了上面的方法从R调用过程,但您不能从函数运行涉及DML和DDL操作的过程

我找到了另一种不使用包装函数而以sql语句形式执行过程的方法


stmt我尝试了上面的方法从R调用过程,但不能从函数运行涉及DML和DDL操作的过程

我找到了另一种不使用包装函数而以sql语句形式执行过程的方法


我有同样的问题。有人找到答案或解决办法了吗?我有同样的问题。有人找到了答案或解决方法吗?