Oracle行转列函数

Oracle行转列函数

1 需求
在实际开发中,行转列函数可以把列值以逗号分隔起来,并显示成一行。现要求利用一条sql语句获得表emp中所有员工姓名,且要求在前台页面中作为一个字符串出现,在这个字符串中员工之间的姓名用逗号分隔开。

2 程序
create or replace function row2col(sqlString varchar2) return varchar2 as
begin
  declare type cu_type is ref cursor;
      cur_name cu_type;
      tmp_name varchar2(20);
      names varchar2(500);

  begin
    open cur_name for sqlString;
    fetch cur_name into tmp_name;
    while cur_name%found loop
      names := names || tmp_name || ',';
      fetch cur_name into tmp_name;
    end loop;
    return rtrim(names, ',');
  end;
end row2col;
/

3 调用
select row2col('select ename from emp') result from dual;
这里result即为内查询得到临时表的别名,也可以去掉
select row2col('select ename from emp') from dual;

4 执行结果
RESULT
--------------------------------------------------------------------------------
SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MIL
LER

5 注意
参数sqlString必须是一个返回单列的SQL语句,否则,此函数将抛出错误。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29485627/viewspace-1248678/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29485627/viewspace-1248678/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值