1、函数
select listagg(job,',') within GROUP (ORDER BY job) as 职位 FROM emp;
listagg() within GROUP () 可以将多行合并成一行(比较常用)
选中job列,用‘,’分隔,并将合并后的列取名‘职位’
2、模块代码+循环
--循环取出每行中元素拼接(去重)
declare
job varchar(2000);
begin
for i in (select distinct job j from emp) loop
job:=job||i.j||',';
end loop;
job:=substr(job,1,length(job)-1);
dbms_output.put_line(job);
end;
利用for loop循环,将每一行的元素依次相加
3、游标
–利用游标取出每行中元素拼接
declare
cursor cur_emp
is select job
from emp;
job varchar(2000);
job_i varchar(2000);
begin
open cur_emp(); --打开游标
fetch cur_emp into job; --先让指针指向结果集的第一行(必须)如果放循环会取不出
loop
fetch cur_emp into job_i; --先指向下一行并赋值
exit when cur_emp%notfound;--表示赋值成功则为1,赋值不成功则为0
job:=job||','||job_i;
end loop;
close cur_emp;
dbms_output.put_line(job);
end;
cur_emp%notfound不是下个元素是否为空,如果放在最后,前面取出来的元素如果不成功,则变量保持不变,这会导致最后一行数据会显示两次。