Oracle PL/SQL获取数据字符串
我是oracle forms的新手,我有一个问题,希望您能帮助我解决 我的问题是,有没有一种方法可以将获取的数据放入数据字符串中? 例如,这里我使用dbms_输出,但有没有办法将所有行放入以“;”分隔的数据字符串中? 所以理想的结果应该看起来像“工程师;经理数据库分析员 多谢各位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';
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。