Если вам нужно использовать внешний цикл, внутреннего можно избежать, вставляя строки в (глобальную временную?) Таблицу;как только это будет сделано, SELECT
из этой таблицы.Примерно так:
begin
for r in (select org_id , name from op_units) loop
dbms_application_info.set_client_info (r.org_id);
insert into temp_table (project_number, description)
select pdi.project_number, ppv.description
from pa_draft_invoices_v pdi
left join pa_projects_v ppv on ppv.project_id = pdi.project_id
where pdi.creation_date > to_date('01/07/2018', 'DD-MM-YYYY');
end loop;
end;
/
Как только это будет сделано,
select * from temp_table;
я бы удалил ORDER BY
в (внешнем) цикле;оно будет выполнено только 32 раза, но - какой смысл?
Использование DBMS_OUTPUT.PUT_LINE
плохо масштабируется.Если данных много, вам может даже не хватить буфера.Также вам придется подождать, пока все не будет нарисовано на выходе.Кроме того, он не гибкий - вы не можете сортировать его, применять к нему фильтры, ... - для каждого изменения, которое вы хотите внести, вы должны запускать один и тот же запрос снова и снова.Но, если все хранится в таблице, вы гораздо больше бесплатно , чтобы делать вещи.