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/,如需转载,请注明出处,否则将追究法律责任。