0

我有以下 PLSQL 块,当 ln_length 为 4000 个字符或更少时成功,但在 ln_length > 4000 个字符时失败并显示“ORA-01460:未实现或不合理的转换请求”。

该块是:

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

1 回答 1

4

没有要测试的 9i,但也许这会解决它:

代替:

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

和:

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

RDBMS 引擎仅支持最长 4000 的 VARCHAR2,而 PL/SQL 最多支持 32767。避免进入数据库进行 REPLACE 操作(无论如何都没有必要),它似乎可以工作(至少 w/ 10g)。

于 2009-10-06T21:58:30.420 回答