2009-10-06 1 views
0

У меня есть следующий блок PLSQL, который преуспевает, когда длина ln_length составляет не более 4000 символов, но не выполняется с запросом «ORA-01460: неосуществленное или необоснованное преобразование», когда ln_length is> 4000 символов.Как запустить функцию REPLACE в Oracle9i со строками более 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; 

Как бы написать эквивалентную часть кода, который обслуживает строк до 32k в длину?

ответ

4

Не имею 9i, чтобы проверить с, но, возможно, это будет получить вокруг него:

заменить:

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

с:

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

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

+0

Да, что взломали его, спасибо! – darreljnz

 Смежные вопросы

  • Нет связанных вопросов^_^