渡した ID に基づいて sys_refcursor を返す PL/SQL パッケージがあります。いくつかの ID を反復処理し、ID ごとに繰り返される元の結果セットから 1 つの列を含む新しい ref カーソルを作成したいと思います。(一種のクロス集計です。) PL/SQL ブロックの非常に簡略化されたバージョンは次のようになります。
create or replace package body dashboard_package is
procedure visits(RC in out sys_refcursor, IdNumber varchar2) as
BEGIN
OPEN RC FOR
select *
from (
select cat, cat_order, subcat, label_text
, trim(to_char(sum(v.current_month),'9,999,999,999')) current_month
, trim(to_char(sum(v.ly_month),'9,999,999,999')) ly_month
, trim(to_char(sum(v.ytd_tot),'9,999,999,999')) ytd_tot
, trim(to_char(sum(v.lytd_tot),'9,999,999,999')) lytd_tot
, trim(to_char(sum(v.ly_tot),'9,999,999,999')) ly_tot
from dashboard v
where v.id_number = IdNumber
group by cat_order, subcat, cat, label_text
union all
...
) a
order by cat_order, subcat;
END;
END;
こんなものがあったらと思います
create or replace procedure test_refcur is
refCursorValue SYS_REFCURSOR;
begin
dashboard_package.visits(refCursorValue,12345);
for cursrow in refCursorValue loop
dbms_output.put_line(cursrow.ytd_tot);
end loop;
end test_refcur;
作業中、そこから取得できます...何か考えはありますか?または、おそらく私が尋ねるべき質問の明確化。