PL / SQL FETCH в строку данных - PullRequest
       69

PL / SQL FETCH в строку данных

0 голосов
/ 31 марта 2020

Я новичок в oracle формах, и у меня есть проблема, надеюсь, вы могли бы помочь мне решить.

Мой вопрос, есть ли способ поместить данные, извлеченные в строку данных? Например, здесь я использую dbms_output, но есть ли способ поместить все строки в строку данных, разделенную ';'? Поэтому в идеале результат должен выглядеть примерно так: «инженер; менеджер; аналитик базы данных;»

Спасибо

DECLARE 
 Job_desc varchar(100);

CURSOR cur_job is 
      SELECT job_id
from job a  where a.salary='10000';
BEGIN 
   OPEN cur_job; 
   LOOP 
   FETCH cur_job into job_desc;
      EXIT WHEN cur_job%notfound; 
      dbms_output.put_line(job_desc || ';'); 
   END LOOP; 

1 Ответ

2 голосов
/ 31 марта 2020

Поскольку это формы, вы должны сделать что-то вроде этого (основываясь на таблице 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
     );

Итак, довольно много вариантов; выберите один.

...