Ich kann Ihnen nicht speziell mit R helfen, aber Sie sagen, Sie haben Probleme beim Aufrufen von Oracle-Prozeduren, die OUT-Parameter als sys_refcursors verwenden. Sie geben auch an, dass diese Fähigkeit möglicherweise noch nicht implementiert ist. Sie sagen jedoch, dass Sie problemlos "Spalten aus der Tabelle auswählen" können.
Daher schlage ich vor, die Prozeduren in Pipeline-Funktionsaufrufe zu ändern und dann eine einfache Auswahl zu treffen, um Ihre Daten von Oracle zu erhalten. Ein kleines Beispiel:
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;
Der Paketkörper:
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;
Verwendung:
select * from table(pkg1.get_recs(3));
Oder:
select num, val from table(pkg1.get_recs(3));
Dies würde 3 Datenzeilen zurückgeben, genau wie eine Prozedur dieselben Daten zurückgeben würde. Nur auf diese Weise können Sie es aus einer Select-Anweisung erhalten (die Sie anscheinend von R aus handhaben können).
Hoffe das hilft.