Я пытаюсь обновить таблицу с помощью 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');
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));