我无法帮助您专门与R,但您说您在调用使用OUT params作为sys_refcursors的Oracle过程时遇到问题。你也表示这个能力可能还没有实现。不过,你确实可以说,你可以“从表格中选择列”就好了。因此,我建议将程序更改为流水线函数调用,然后执行简单的选择以从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中处理)。
希望有所帮助。
如果还没有实施,那么你可能运气不好。你有没有尝试将输出转储到文件中,然后将文件读入R? – 2011-09-27 20:24:36
我只是不相信我是唯一想做这件事的人,所以我以为我错过了一些东西。文件转储是一个选项 - 我也想到我可以调用java中的proc并使用rJava将其链接到我的R代码。我继承了一些在R中有直接Sybase proc调用的代码,并且工作正常。现在我们正在转向甲骨文,我只是想换掉我的电话,但显然不是那么简单。 – Mike
从https://www.rforge.net/RJDBC/news.html:添加对存储过程调用JDBC语法的支持。目前仅支持IN参数... –