Non posso aiutarti in modo specifico con R, ma dici che stai riscontrando problemi nel chiamare le procedure Oracle che utilizzano i parametri OUT come sys_refcursors. Indichi anche che questa capacità potrebbe non essere ancora implementata. Dici, tuttavia, che puoi "selezionare colonne dalla tabella" bene.
Quindi, propongo di modificare le procedure in chiamate di funzioni pipeline e quindi di eseguire una semplice selezione per ottenere i dati da Oracle. Un piccolo esempio:
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;
Il corpo del pacchetto:
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;
Utilizzo:
select * from table(pkg1.get_recs(3));
Oppure:
select num, val from table(pkg1.get_recs(3));
Ciò restituirebbe 3 righe di dati, proprio come una procedura restituirebbe gli stessi dati. Solo in questo modo puoi ottenerlo da un'istruzione select (che sembri essere in grado di gestire da R).
Spero di esserti stato d'aiuto.