1

我正在尝试使用oreplace更新表,但它不会让我说它超过了长度。我已经尝试将其分解为第一种方法中的多个 orplace 语句,以及第二种方法中的多个更新语句,但它仍然不起作用或给我想要的结果。

显然 orplace 最多只能返回 8000 个字符?如果是,那么解决方案/解决方法是什么?

一种方法:

sel
oreplace (substr(text_val,1,8000),'CIM_OUTPUT','DD_CIM_OUTPUT')
|| oreplace (substr(text_val,8001,16000),'CIM_OUTPUT','DD_CIM_OUTPUT')
|| oreplace (substr(text_val,16001,18000),'CIM_OUTPUT','DD_CIM_OUTPUT')
from DB.TABLENAME ;

第二种方法:

这样做的问题是 text_val 在第一次更新后被截断,其余更新不适用于 text_Val 的完整值,因此将它们呈现为无用。

update DB.TABLENAME set text_val = oreplace (substr(text_val,1,8000),'CIM_OUTPUT','DD_CIM_OUTPUT');

update DB.TABLENAME set text_val = text_val||oreplace (substr(text_val,8001,16000),'CIM_OUTPUT','DD_CIM_OUTPUT');

update DB.TABLENAME set text_val = text_val || oreplace (substr(text_val,16001,18000),'CIM_OUTPUT','DD_CIM_OUTPUT');
4

1 回答 1

2

oReplace 限制为 8000 个字符(可能是因为它基于 Oracle)。REGEXP_REPLACE 对 VarChar 输入具有相同的限制,但也适用于 CLOB。这应该工作:

SET TEXT_VAL=cast(regexp_replace(cast(text_Val as CLOB),'cim_output','DD_cim_ouput') as varchar(18000));
于 2020-12-11T16:54:07.587 回答