Oracle Regex替换字符串查询

时间:2016-05-09 09:11:15

标签: sql regex database oracle replace

从我的表的CLOB列中保存的xml中获取子xml的查询如下:

select REGEXP_REPLACE(xmltype(t.prov_request).extract('//SOAP_Domain_Msg/Body').getStringVal(),'<Body>|</Body>','') xml 
from tbl_prov_comptel

上述查询返回的字符串中有"SO1_USERNAME" value="xxx"。 我想要实现的是形成一个合并查询并在上面的表达式的开头附加一些东西。

即,"SO1_USERNAME" value="qwexxx"

1 个答案:

答案 0 :(得分:0)

Oracle安装程序

CREATE TABLE tbl_prov_comptl ( prov_request CLOB );

INSERT INTO tbl_prov_comptl VALUES (
  '<SOAP_Domain_Msg><Body><NS4:ModifyRequest xmlns:NS4="http://soa.comptel.com/2011/02/instantlink"><NS4:RequestParameters> <NS4:Parameter name="SO1_USERNAME" value="222671150"/></NS4:RequestParameters> </NS4:ModifyRequest></Body></SOAP_Domain_Msg>'
);

<强>查询

SELECT EXTRACTVALUE(
         xml,
         '//NS4:ModifyRequest/NS4:RequestParameters/NS4:Parameter[name="SO1_USERNAME"]/@value',
        'xmlns:NS4="http://soa.comptel.com/2011/02/instantlink"'
       ) AS SO1_USERNAME,
       x.xml.getStringVal() AS xml
FROM   (
  SELECT XMLType( prov_request ).extract( '//SOAP_Domain_Msg/Body/*' ) AS xml
  FROM   tbl_prov_comptl
) x;

<强>输出

SO1_USERNAME XML
------------ ------------------------------------------------------------------------------
222671150    <NS4:ModifyRequest xmlns:NS4="http://soa.comptel.com/2011/02/instantlink"><NS4
             :RequestParameters> <NS4:Parameter name="SO1_USERNAME" value="222671150"/></NS
             4:RequestParameters> </NS4:ModifyRequest>