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



我试图使用oreplace更新一个表,但它不允许我这样做,因为它超过了长度。在第一种方法中,我尝试将其分解为多个oreplace语句,在第二种方法中尝试将其拆分为多个update语句,但它仍然不起作用,也没有给我想要的结果。

显然oreplace最多只能返回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的完整值,因此将它们呈现为useles。

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

最新更新