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
);
所以,有很多选择;选一个。
我是 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
);
所以,有很多选择;选一个。