orcl 行转列的存储过程

CREATE or replace PROCEDURE sp_fixWage AUTHID CURRENT_USER as

--此处需要注意的 authid current_user 这个属性  详细请查看 上篇博文:http://www.cnblogs.com/Strive-fighting/p/3769042.html
v_sql varchar2(4000); --定义拼接的sql字符串
cursor cursor_1 is select distinct v.fieldvalue from v_userFixWage v ;

--定义游标 :需要转换成列的那一行字段值
begin
v_sql :='select user_id,year,month ';
for v_user in cursor_1
loop
v_sql :=v_sql || ',' || 'SUM(DECODE(fieldvalue,''' || v_user.fieldvalue ||
''',value,0)) AS ' || v_user.fieldvalue;
end loop;

--循环游标拼接sql字符串
v_sql :=v_sql || ' from v_userFixWage group by user_id,year,month order by user_id,year,month';
v_sql :='create or replace view v_fixwageResult as ' || v_sql;
EXECUTE IMMEDIATE v_sql; 

--创建视图
END ;

-----------=====以上是创建存储过程的语句====---

begin
sp_fixWage();
end ;

-----===========以上三句是执行存储过程----------
select * from v_fixwageResult;

---------查询新创建的视图语句---------

以下是截图:

转换前:

转换后如下图所示:

若有不表达不清楚的地方欢迎 留言 提问,不足的地方请大家多多指教

posted on 2014-06-05 00:12  wang_cq  阅读(644)  评论(0编辑  收藏  举报