Nemohu vám konkrétně pomoci s R, ale říkáte, že máte problémy s voláním procedur Oracle, které používají parametry OUT jako sys_refcursors. Uvádíte také, že tato schopnost ještě nemusí být implementována. Říkáte však, že můžete v pohodě „vybrat sloupce z tabulky“.
Navrhuji tedy změnit procedury na zřetězená volání funkcí a poté jednoduchým výběrem získat data z Oracle. Malý příklad:
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;
Tělo balíčku:
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;
Použití:
select * from table(pkg1.get_recs(3));
Nebo:
select num, val from table(pkg1.get_recs(3));
To by vrátilo 3 řádky dat, stejně jako procedura vrátí stejná data. Pouze tímto způsobem jej můžete získat z příkazu select (který, jak se zdá, zvládáte z R).
Doufám, že to pomůže.