Как было указано в комментариях, неизвестная структура столбцов вашего курсора очень затруднит извлечение результатов в PL / SQL.
Однако, если все, что вы действительно пытаетесьсделать, это отправить результаты обратно клиенту через DBMS_OUTPUT
, вы можете сделать это с помощью DBMS_OUTPUT.RETURN_RESULTS
.
Вот модифицированная версия вашего PL / SQL-блока, которая печатает кросс-таблицу пользователей и типов объектов из DBA_OBJECTS
, где каждая ячейка показывает количество объектов данного типа, принадлежащих данному пользователю.
declare
storage_var clob;
storage_query clob;
l_ref_cur SYS_REFCURSOR;
begin
SELECT LISTAGG('''' || o.object_type || '''',',')
WITHIN GROUP ( ORDER BY o.object_type)
INTO storage_var
FROM ( SELECT DISTINCT OBJECT_TYPE FROM dba_objects ) o;
storage_query := 'select *
from ( SELECT owner, object_type FROM dba_objects ) o
pivot
(count(*) for object_type in (' || storage_var || '))
order by 1';
dbms_output.put_line(storage_query);
OPEN l_ref_cur FOR storage_query;
dbms_sql.return_result(l_ref_cur);
end;
/