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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值