Как запустить функцию REPLACE в Oracle9i со строками длиной более 4000 символов
Вопрос
У меня есть следующий блок PLSQL, который выполняется успешно, когда длина ln_length равна 4000 символов или меньше, но завершается с ошибкой «ORA-01460:запрошено нереализованное или необоснованное преобразование», когда ln_length > 4000 символов.
Блок это:
DECLARE
ls_string VARCHAR2(32767);
ls_temp VARCHAR2(32767);
ln_length NUMBER := 4000;
BEGIN
ls_string := '';
FOR i IN 1..ln_length LOOP
ls_string := ls_string || 'x';
END LOOP;
SELECT REPLACE(ls_string,'bob')
INTO ls_temp FROM dual;
END;
Как мне написать эквивалентный фрагмент кода, который обрабатывает строки длиной до 32 КБ?
Решение
У меня нет 9i для тестирования, но, возможно, это обойдётся:
заменять:
SELECT REPLACE(ls_string,'bob')
INTO ls_temp FROM dual;
с:
ls_temp := REPLACE(ls_string,'bob');
Механизм RDBMS поддерживает только VARCHAR2 длиной до 4000, тогда как PL/SQL поддерживает до 32767.Избегайте обращения к базе данных для операции REPLACE (в любом случае в ней нет необходимости), и она, похоже, работает (по крайней мере, с 10g).
Не связан с StackOverflow