Oracle数据库取出表中某栏并变成横排--三种方式

博客围绕Oracle数据库展开,介绍了数据横排显示的方法。提到使用listagg() within GROUP ()函数将多行合并成一行,还可利用for loop循环依次相加每行元素。同时指出游标使用时,cur_emp%notfound位置不当会使最后一行数据显示两次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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不是下个元素是否为空,如果放在最后,前面取出来的元素如果不成功,则变量保持不变,这会导致最后一行数据会显示两次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值