oracle动态游标、动态sql、xml
-- Created on 2018/7/20 by XHL
declare
-- Local variables here
v_select varchar2(100);
Type my_cursor is ref cursor;--声明动态游标类型
v_cursor my_cursor;--定义动态游标变量
病人id integer;
总费用 number(9,2);
totle integer:=0;
v_xml_data clob;
v_temp_xml xmltype;
out_xml xmltype;
begin
-- Test statements here
--使用动态游标执行动态sql语句
v_select:='select 病人id,sum(总费用) as 总费用 from zl9i_scsm.保险支付记录 group by 病人id order by 病人id';
v_temp_xml:=xmltype('<OUT><RESULT><RESULT/></OUT>');
open v_cursor for v_select; --打开自定义REF游标
loop
fetch v_cursor into 病人id,总费用; --指定行并into变量或%rowtype类型变量
exit when v_cursor%notfound or totle>=10; --退出循环条件
totle:=totle+1;--记录总数
v_xml_data:='<病人id>'||病人id||'<总费用>'||总费用||'</总费用></病人id>';--拼接xml数据
select appendchildxml(v_temp_xml,'/OUT/RESULT',xmltype(v_xml_data)) into v_temp_xml from dual;
end loop;
close v_cursor;--fetch循环游标需要关闭游标
out_xml:=v_temp_xml;
--输出查看结果
dbms_output.put_line(v_xml_data);
exception
when others then
v_xml_data:='<result><totle>0</totle><data>错误代码:'||sqlcode||',错误消息:'||sqlerrm||'。<data/></result>';
end;