Как запустить функцию REPLACE в Oracle9i со строками длиной более 4000 символов - PullRequest
0 голосов
/ 07 октября 2009

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

1 Ответ

4 голосов
/ 07 октября 2009

У меня нет 9i для тестирования, но, возможно, это обойдется:

заменить:

SELECT REPLACE(ls_string,'bob')
INTO ls_temp FROM dual;

с:

ls_temp := REPLACE(ls_string,'bob');

Движок СУБД поддерживает только VARCHAR2 длиной до 4000, в то время как PL / SQL поддерживает до 32767. Избегайте обращения к базе данных для операции REPLACE (в любом случае это не нужно), и, похоже, она работает (по крайней мере, с 10g) .

...