Oracle使用正则表达式REGEXP_REPLACE替换xml格式文档中的数据

作者: bea, black 分类: Oracle数据库 发布时间: 2019-04-03 21:51  阅读: 271 views

  需求描述:表TIMP_CONFIG中TEXT_DATA为clob类型,存储xml数据,

原数据为:

<tables>
...
<table>TBSI_IR_VALUATION</table>
<yKey>VAL_SOURCE,PORT_CODE,I_CODE,A_TYPE,M_TYPE</yKey>                              
<primary>VAL_SOURCE,PORT_CODE,I_CODE,A_TYPE,M_TYPE,T_DATE</primary>
...
</tables>

需要调整为:

<tables>
...
<table>TBSI_IR_VALUATION</table>
<yKey>VAL_SOURCE,PORT_CODE,HC_ID,I_CODE,A_TYPE,M_TYPE,ACCT_CODE</yKey>
<primary>VAL_SOURCE,PORT_CODE,HC_ID,I_CODE,A_TYPE,M_TYPE,ACCT_CODE,T_DATE</primary>   
...
</tables> 

其中有一段标签对会经常变,而且可能出现空格、换行等情况。

需求也只需替换表名为“TBSI_IR_VALUATION”对应的代码,这里就需要用正则表达式找到这段代码,然后进行替换

oracle脚本如下:

UPDATE TIMP_CONFIG
     SET TEXT_DATA  = REGEXP_REPLACE(TEXT_DATA, 
    '<table>TBSI_IR_VALUATION.*?</primary>',  .*--匹配所有字符,不包含换行符,?0次或者1次
    '<table>TBSI_IR_VALUATION</table>
      <yKey>VAL_SOURCE,PORT_CODE,HC_ID,I_CODE,A_TYPE,M_TYPE,ACCT_CODE</yKey>
      <primary>VAL_SOURCE,PORT_CODE,HC_ID,I_CODE,A_TYPE,M_TYPE,ACCT_CODE,T_DATE</primary>',
1,0,'n')
   WHERE ID = 3;

regexp_replace函数说明如下

REGEXP_REPLACE(第一个是输入的字符串,第二个是正则表达式, 第三个是替换的字符,第四个是标识从第几个字符开始正则表达式匹配。(默认为1),第五个是标识第几个匹配组。(默认为全部都替换掉),第六个是是取值范围)函数
第六个是是取值范围:

i:大小写不敏感;
c:大小写敏感;
n:点号 . 不匹配换行符号;
m:多行模式;
x:扩展模式,忽略正则表达式中的空白字符。

 


   原创文章,转载请标明本文链接: Oracle使用正则表达式REGEXP_REPLACE替换xml格式文档中的数据

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读