在R语言中调用Oracle存储过程-如何获取结果集



寻找使用R调用Oracle存储过程并返回结果集的示例

我使用RJDBC库,dbGetQuery调用Sybase进程,并将结果指向一个变量,这对于Oracle select stmts也是一样的。然而,我不知道如何从Oracle存储过程(即sys_refcursor out参数)中返回Oracle结果集。我发现从Oracle中检索数据的唯一示例包括"select columns from table"。

在谷歌搜索导致我"dbCallProc -调用一个SQL存储过程"这听起来很有前途,但每一个参考我发现它表明它是"尚未实现。"

有使用过程的指针或例子吗?大大赞赏。不知道为什么在检索结果集时Oracle总是这么难....

谢谢,迈克

UPDATE:我举一个简单地称为Oracle存储过程的例子,Oracle进程是否在RJDBC中不被支持?

我不能帮助你具体与R,但你说你有问题在调用Oracle过程使用OUT参数作为sys_refcursors。您还指出此能力可能尚未实现。但是,您确实说过,您可以"从表中选择列"。

所以,我建议将过程更改为流水线函数调用,然后做一个简单的选择来从Oracle获取数据。一个小例子:

CREATE OR REPLACE package pkg1 as
  type t_my_rec is record
  (
    num my_table.num%type,
    val my_table.val%type
  );
  type t_my_tab is table of t_my_rec;
  function get_recs(i_rownum in number)
      return t_my_tab
      pipelined;
END pkg1;

包体:

create or replace package body pkg1 as
  function get_recs(i_rownum in number)
      return t_my_tab
      pipelined
  IS
    my_rec t_my_rec;
  begin
    -- get some data
    -- implement same business logic as in procedure
    for my_rec in (select num, val from my_table where rownum <= i_rownum)
    loop
      pipe row(my_rec);
    end loop;
    return; 
  end get_recs;
end pkg1;

用法:

select * from table(pkg1.get_recs(3));

或:

select num, val from table(pkg1.get_recs(3));

这将返回3行数据,就像过程返回相同的数据一样。只有这样,你才能从select语句中获得它(你似乎能够从R中处理)。

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新