Поскольку это формы, вы должны сделать что-то вроде этого (основываясь на таблице EMP Скотта):
declare
job_desc varchar2(100);
begin
for cur_r in (select distinct job
from emp
where sal > 1000
)
loop
job_desc := job_desc ||';'|| cur_r.job;
end loop;
end;
Теперь все зависит от того, что вы хотите сделать с job_desc
:
отображать его в виде сообщения на экране (два последовательных message
вызова; в противном случае оно будет отображаться в строке состояния)
end loop;
message(job_desc);
message(job_desc);
(в качестве альтернативы посмотрите, как оповещения работа)
поместить его в элемент блока:
end loop;
:block.job_description := job_desc;
Но для этого варианта вы бы предпочли непосредственно помещать задания в item, а не в переменную, а затем в item.
Не знаю, поддерживают ли Forms 10 listagg
; если это так, было бы еще проще:
select listagg(job, ';') within group (order by null) job_desc
from (select distinct job
from emp
where sal > 1000
);
Если нет, xmlagg работает:
select rtrim (xmlagg (xmlelement (e, job || ', ') order by job).extract
('//text()'), ', ')
from (select distinct job
from emp
where sal > 1000
);
Итак, довольно много вариантов; выберите один.