北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

oracle关于xml的解析(oracle解析xml字符串)

有时需要在存储过程中处理xml,oracle提供了相应的函数来进行处理,xmltype以及相关的函数。

废话少说,上代码:

select  xmltype(SIConfirmOutput).extract('//output//tradeinfo//tradeno//text()').getstringval() into v_tradeno from dual;

SIConfirmOutput为字符串变量,也可以为clob类型的变量,此为取单个值的方法。

以下为取xml节点里一组值的办法,feeitemarray节点下包含若干个feeitem:


               select  extractvalue(VALUE(t), 'feeitem//@itemno') as itemno,
               extractvalue(VALUE(t), 'feeitem//@recipeno') as recipeno,
               extractvalue(VALUE(t), 'feeitem//@hiscode') as hiscode,
               extractvalue(VALUE(t), 'feeitem//@itemcode') as itemcode,
               extractvalue(VALUE(t), 'feeitem//@itemname') as itemname,
               extractvalue(VALUE(t), 'feeitem//@itemtype') as itemtype,
               extractvalue(VALUE(t), 'feeitem//@unitprice') as unitprice,
               extractvalue(VALUE(t), 'feeitem//@count') as count,
               extractvalue(VALUE(t), 'feeitem//@fee') as fee,
               extractvalue(VALUE(t), 'feeitem//@feein') as feein,
               extractvalue(VALUE(t), 'feeitem//@feeout') as feeout,
               extractvalue(VALUE(t), 'feeitem//@selfpay2') as selfpay2,
               extractvalue(VALUE(t), 'feeitem//@state') as state,
               extractvalue(VALUE(t), 'feeitem//@fee_type') as fee_type,
               extractvalue(VALUE(t), 'feeitem//@preferentialfee') as preferentialfee,
               extractvalue(VALUE(t), 'feeitem//@preferentialscale') as preferentialscale,
               1,'reg', to_char(now,'yyyymmddhh24miss')||PatientID
               from  table(XMLSequence(extract(xmltype(SIOutput), 'root//output//feeitemarray//feeitem'))) t;

SIOutput为varchar2变量或者clob变量,'feeitem//@fee_type' 里面有@表示为取属性值而不是取value值,如下面的xml: <feeitem itemno="1" fee_type="0101" preferentialfee="0.0000" preferentialscale="0"></feeitem> 取的是fee_type的值。

另外注意,给oracle传值时如果字符串不能太长(好像是不能超过4000),超长需要转为clob,这一点需要注意,在PB里需要转成blob,在C#里需要转成byte[]来传。

20250614

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言