Teradata 中的 oreplace 超出限制的解决方法

Workaround for oreplace in Teradata exceeding limit

我正在尝试使用 oreplace 更新 table,但它不允许我这样做,说它超过了长度。 我试过将它分成多个 oreplace 语句,作为第一种方法,多个更新语句作为第二种方法,但它仍然不起作用或没有给我想要的结果。

显然 oreplace 最多只能 return 8000 个字符?如果是,这个 solution/workaround 是什么?

第一种方法:

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');

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));