Oracle行轉列函式

zhenghaishu發表於2014-08-10
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章