动态sql 行转列

第一次写的存储过程值得留念


create or replace procedure dynamic_sql_duty(
attendmonth in varchar2,
sqlsstr out varchar2
) is
CURSOR cur is
select distinct t.ccid ccid,
nvl(lower(u.name),to_char('removed'||t.ccid)) name
from cmsuser u,duty t
where t.ccid = u.id(+)
and to_char( t.tdate ,'YYYY-MM') = attendmonth
order by t.ccid ;
sqls varchar2(8000);

begin

sqls :='select d.datetime,d.content,c.* from ('||chr(13)
||'select '||chr(13);

FOR cur_result in cur LOOP

sqls := sqls || ' max( decode( ccid,'||to_char(cur_result.ccid)||', status ) ) '||cur_result.name||' , '||chr(13);
sqls := sqls || ' max( decode( ccid,'||to_char(cur_result.ccid)||', id ) ) '||cur_result.name||'id , '||chr(13);

END LOOP;

sqls := sqls
||' to_char( tdate ,'
||''''||'YYYY-MM-DD'||''''||') attenddate , '||chr(13)
||' to_char( tdate ,'||''''||'D'||''''||') todaynum ,'||chr(13)
||' to_char( tdate ,'||''''||'DAY'||''''||') todays ,'||chr(13)
||' tdate '||chr(13)
||' from duty '||chr(13)
||' where '||chr(13)
||' to_char( tdate ,'
||''''||'YYYY-MM'||''''||') = '
||'''' ||attendmonth||'''' ||chr(13)
||' group by tdate ) c, dutyremark d '||chr(13)
||'where c.tdate = d.datetime(+)';
--dbms_output.put_line(sqls);
--execute immediate sqls;
--open testcor for sqls;
sqlsstr := sqls;

end dynamic_sql_duty;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值