【问题标题】:Workaround for oreplace in Teradata exceeding limitTeradata 中 oreplace 超出限制的解决方法
【发布时间】:2021-03-23 02:02:49
【问题描述】:

我正在尝试使用 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');

【问题讨论】:

    标签: sql database teradata data-warehouse teradatasql


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多