Я не могу помочь вам конкретно с R, но вы говорите, что у вас есть проблемы при вызове процедур Oracle, которые используют параметры OUT в качестве sys_refcursors.Вы также указываете, что эта возможность еще не реализована.Вы, однако, говорите, что вы можете просто «выбрать столбцы из таблицы».
Итак, я предлагаю изменить процедуры на конвейерные вызовы функций, а затем сделать простой выбор, чтобы получить ваши данные из 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).
Надеюсь, это поможет.