Обходной путь для превышения лимита oreplace в Teradata

Я пытаюсь обновить таблицу с помощью oreplace, но он не позволяет мне это сделать, говоря, что он превышает длину. Я попытался разбить его на несколько операторов замены, как в первом подходе, и несколько операторов обновления, как второй подход, но он все еще не работает и не дает желаемых результатов.

По-видимому, 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, что делает их полезными.

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');
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
780
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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));

Другие вопросы по теме