我無法幫助您專門與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參數... –