oracle - 通过替换超过 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));
任何帮助表示赞赏
解决方案
推荐阅读
- laravel - Laravel:auth()->尝试未定义的方法
- python - 我需要获取一个变量(用户电子邮件)并将其作为参数传递给嵌套类,但我无法使其工作
- asp.net - 即使我设置了静态机器密钥,oauth 持有者刷新令牌在应用程序池回收时也无效
- tinymce - TinyMCE - 向编辑器添加一个简单的按钮(不是工具栏)
- haskell - 大输入的阶乘函数返回负数
- sql - 根据商店选择每个产品的最新余额(SQL)
- python - 将一种 json 格式更改为另一种
- excel - 如何从动态添加的文本框中读取文本?
- jquery - 如何使用 jquery 从 api 调用加载新图表(chartsjs)?
- c# - 使用月份名称动态绑定下拉列表