sys_refcursor из процедуры, не возвращающей данные
CREATE TYPE prList AS TABLE OF pr;
create or replace
procedure qLink(ret out sys_refcursor)
IS
myPrList prList := prList();
open ret for
select *
from (select a.lin, a.pr,
b.name, sum(a.up) as u,
sum (a.d) as d
from li_dy_4 a,
p_list b,
TABLE(CAST(myPrList as prList)) my_list
where a.pr=b.id
and b.parent_id != 0
and a.partitionid <= 308
and a.partitionid >= 302
and a.pr = my_list.pr
GROUP BY a.pr, b.name, a.lin
order by d desc) ;
BEGIN
myPrList := prList ( pr(91),
pr(80));
END;
variable rc refcursor;
exec qlink( :rc );
print rc;
[/код]
Приведенный выше пример кода не возвращает данных, отображаются только поля таблицы. Что мне здесь не хватает? но если не использовать refcursor, все работает нормально, даже если я попытался передать массив в виде списка, он работает с приведенным выше кодом, пожалуйста, помогите...
1 ответ
Решение
Я думаю, что это должно быть так:
create or replace
procedure qLink(ret out sys_refcursor)
IS
myPrList prList := prList();
BEGIN
myPrList := prList ( pr(91),pr(80));
open ret for
select *
from (select a.lin, a.pr,
b.name, sum(a.up) as u,
sum (a.d) as d
from li_dy_4 a,
p_list b,
TABLE(CAST(myPrList as prList)) my_list
where a.pr=b.id
and b.parent_id != 0
and a.partitionid <= 308
and a.partitionid >= 302
and a.pr = my_list.pr
GROUP BY a.pr, b.name, a.lin
order by d desc) ;
END;
И возможно это TABLE(CAST(myPrList as prList)) my_list
можно заменить просто следующим: TABLE(prList(pr(91),pr(80))) my_list
- но я не проверял это!