首页 > 解决方案 > 通过替换超过 4000 的正则表达式来更新 xmlrecord

问题描述

我必须在几个 xml 表中通过 My_Emp2 更新一些包含字符串 My_Emp1 的表,我正在使用以下脚本

UPDATE MYDB.EMP_DETAILS T SET T.REC= REGEXP_REPLACE(T.REC, '(My_Emp1)','My_Emp2')  WHERE T.REC LIKE '%EMP_NAME1%'

问题是如果 rec 列包含超过 4000 个字符,则会失败并出现 oracle 错误:

ORA-19011: 字符串缓冲区太小,低于列结构的示例,但它与表不同,因此我不知道如何解析第一个值并用第二个值替换它

列结构示例

<row id="My_Emp1">
  <c1>My_Emp1_Addr</c1>
  <c3>Birthday</c3>
  <c5>GID</c5>
  <c6>FLOOR</c6>
  <c27>DESK</c27>
  <c28>My_EMP1_0214458</c28>
  <c29>EMPTY_VAL</c29>
  <c30>ACC_GRANTED</c30>
  <c31>DATE_TIME</c31>
  <c32>Ver</c32>
</row>

我发现我必须使用 dbms_lob 内置包,但我不知道该怎么做,我也尝试过以下方法:

update EMP_DETAILS
set REC = updatexml(xmltype(REC), '//row[@id like '%My_Emp1%']/@id', 'My_Emp2').getclobval()
where dbms_lob.compare(xmldata, empty_clob()) != 0
and xmlexists('//row[@id like '%My_Emp1%']' passing xmltype(xmldata));

任何帮助表示赞赏

标签: oraclereplaceclobxmltype

解决方案


推荐阅读