PL/SQL FETCH 到数据字符串

PL/SQL FETCH into data string

我是 oracle 表单的新手,我有一个问题希望你能帮我解决。

我的问题是有没有办法将获取的数据放入数据字符串中? 例如,我在这里使用 dbms_output,但是有没有办法将所有行放入由“;”分隔的数据字符串中? 所以理想情况下结果应该类似于 'engineer;manager;database analyst;'

谢谢

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; 

因为它是 Forms,你会做这样的事情(基于 Scott 的 EMP table):

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;
    

    但是,对于此选项,您宁愿直接将作业放入项目中,而不是放入变量中然后放入项目中。


不知道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
     );

所以,有很多选择;选一个。