Как запустить функцию REPLACE в Oracle9i со строками длиной более 4000 символов

StackOverflow https://stackoverflow.com/questions/1528272

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть следующий блок 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top