2015-07-21 122 views
9

我在db2(v10)数据库中有一个CLOB(2000000)字段,我想运行一个简单的UPDATE查询来替换“foo”到“baaz”的每个发生。替换CLOB列中的字符(db2)

由于字段的内容更多的则是32K,我得到以下错误:

"{some char data from field}" is too long.. SQLCODE=-433, SQLSTATE=22001 

我怎么能代替值?

UPDATE: 查询是以下(改变更新到SELECT更容易测试):

SELECT REPLACE(my_clob_column, 'foo', 'baaz') FROM my_table WHERE id = 10726 

更新2 作为mustaccio指出,REPLACE不上CLOB下地干活(或至少不是没有对所输入的数据进行VARCHAR转换 - 在我的情况下这是不可能的,因为数据的大小超过了32k) - 问题是要找到一种替代方法来实现REPLACE函数CLOB字段的所有人。

感谢, krisy

+0

您可能想要显示您运行的实际语句。另外,这是DB2 for z/OS? (它是版本10的唯一平台。) – mustaccio

+0

用查询更新了我的问题 – krisy

+0

函数'REPLACE'接受并返回'VARCHAR',所以显然不能用它来处理CLOB列。 – mustaccio

回答

0

不知道这是否适用于你的情况:有2种不同的替代由DB2,SYSIBM.REPLACESYSFUN.REPLACE提供的功能。 SYSFUN中的REPLACE版本接受CLOB并支持高达1 MB的值。如果你的值比你需要编写自己的(基于SQL的?)函数更长。

BTW:你可以通过执行“的值(当前路径)”

+0

谢谢您的回答!我的领域可悲地大于1Mb(大约3-4Mb) – krisy

1

最后,因为我已经由一个SQL查询发现没有办法来此检查函数解析,我结束了导出表,编辑其LOB内容在Notepad ++中,然后再次导入表格。