大家好,欢迎来到IT知识分享网。
有时需要在存储过程中处理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[]来传。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/181602.html