特にRについてはお役に立てませんが、OUTパラメータを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から処理できるようです)から取得できます。
お役に立てば幸いです。