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操作のためにデータベースにアクセスすることは避けてください(とにかく不要です)。

于 2009-10-06T21:58:30.420 に答える