我CLOB(2000000)在db2(v10)数据库中有一个字段,我想UPDATE对它运行一个简单的查询,将每个出现的"foo"替换为"baaz".
由于该字段的内容超过32k,我收到以下错误:
"{some char data from field}" is too long.. SQLCODE=-433, SQLSTATE=22001
Run Code Online (Sandbox Code Playgroud)
如何更换值?
更新:查询如下(将UPDATE更改为SELECT以便于测试):
SELECT REPLACE(my_clob_column, 'foo', 'baaz') FROM my_table WHERE id = 10726
Run Code Online (Sandbox Code Playgroud)
更新2
正如mustaccio所指出的那样,REPLACE对CLOB字段不起作用(或者至少没有VARCHAR对输入的数据进行强制转换- 在我的情况下,由于数据大小超过32k而不可能) - 问题是关于找到一种替代方法来REPLACE实现CLOB字段的功能.
谢谢,克里西
不确定这是否适用于您的情况:DB2 提供了 2 种不同的 REPLACE 函数:SYSIBM.REPLACE和SYSFUN.REPLACE。SYSFUN 中的 REPLACE 版本接受 CLOB 并支持最大 1 MB 的值。如果您的值比您需要编写自己的(基于 SQL?)函数长。
顺便说一句:您可以通过执行“values(当前路径)”来检查函数解析