Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL获取数据字符串_Oracle_Plsql_Oracle10g_Oracleforms - Fatal编程技术网

Oracle PL/SQL获取数据字符串

Oracle PL/SQL获取数据字符串,oracle,plsql,oracle10g,oracleforms,Oracle,Plsql,Oracle10g,Oracleforms,我是oracle forms的新手,我有一个问题,希望您能帮助我解决 我的问题是,有没有一种方法可以将获取的数据放入数据字符串中? 例如,这里我使用dbms_输出,但有没有办法将所有行放入以“;”分隔的数据字符串中? 所以理想的结果应该看起来像“工程师;经理数据库分析员 多谢各位 DECLARE Job_desc varchar(100); CURSOR cur_job is SELECT job_id from job a where a.salary='10000';

我是oracle forms的新手,我有一个问题,希望您能帮助我解决

我的问题是,有没有一种方法可以将获取的数据放入数据字符串中? 例如,这里我使用dbms_输出,但有没有办法将所有行放入以“;”分隔的数据字符串中? 所以理想的结果应该看起来像“工程师;经理数据库分析员

多谢各位

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; 

根据表格,您可以根据Scott的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做什么:

在屏幕上以消息的形式显示两次连续的消息调用;否则,它将显示在状态行中

end loop;
message(job_desc);
message(job_desc);
或者,查看警报的工作方式

将其放入块项目:

end loop;
:block.job_description := job_desc;
但是,对于这个选项,您更愿意直接将作业放入项中,而不是先放入变量,然后再放入项中

我不知道表格10是否支持Listag;如果是这样,那就更简单了:

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
     );

所以有不少选择,;选择一个。

表单-甚至是更高版本-不支持大多数?在11g功能中,Listag是其中之一。还有另一个解决方法-您可以使用用户定义的聚合,因此您可以实现自己的listagg限制是您不能使用“组内order by”子句,您必须在实现中硬编码order by子句,或者如果您不想实现自己的聚合,则提供未记录的wm_concat聚合,只要你用逗号作为分隔符就行。嗨,小家伙,你又救了我一次。我用了第一种方法,效果很好。不幸的是,我的表单不支持Listag。