次のスクリプトでは、4000文字のsubstrを実行しようとすると、特定のIDのすべてのテキストがDBフィールドID言語を増やしても、4001 dbでもエラーが表示されます - ora-06502:pl/sql:数値または値のエラーです。4000文字以上のSubstrはORA-06502を取得します。PL/SQL:数値または値のエラー
Create or replace function GET_AER_TEXT5(M_AER_ID IN NUMBER,
F_ID IN VARCHAR2,PREF_LANGUAGE IN VARCHAR2)
IS
AERTEXT VARCHAR2(32000);
LANG_PARAM VARCHAR2(2000);
AER_CLOB CLOB;
BEGIN
FOR c1 IN (
select TEXT from AER_TEXT
where FIELD_ID=F_ID and AER_ID=M_AER_ID and LANGUAGE IN(PREF_LANGUAGE)
)
LOOP
IF c1.text IS NOT NULL THEN
AER_CLOB:=AER_CLOB || c1.text;
END IF;
END LOOP;
AERTEXT:=substr(AER_CLOB,1,4000);
RETURN(AERTEXT);
END;
この値を4000以上にすることの重要性は、完全なテキストデータを引き出すことです。 DB列に4Kを超える文字が含まれていると、動作しません。
私はそれを呼んでいる:あなたはこの問題を取り除くためにどのようにアドバイスしてくださいすることができ
select AER_ID,GET_AER_TEXT5(AER_ID,at,field_id,'001')
from AER a,AER_TEXT AT
where AT.field_ID=12345 and a.aer_id=at.aer_id;
。
また、エラースタック全体とその関数の呼び出し方法を示します。テキスト全体が必要な場合は、なぜCLOBではなくVARCHAR2を戻していますか? –
http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-wing-asking-a-question/285557#285557 –
申し訳ありません、私今編集しました。 –