0

varchar2 を追加する Oracle プロシージャがあります。

var1 varchar2(32767);

if nvl(length(var1),0) + length(var2||var3||var2||chr(10)||var4||chr(10)||chr(10)) < 32767 
then  var1:= var1||var2||var3||var2||chr(10)||var4||chr(10)||chr(10);
end if;

デバッグ中に次のことを確認できます。

lengh(var1||var2||var3||var2||chr(10)||var4||chr(10)||chr(10))

は 32767 よりも低くなっています。しかし、3 行目を実行しようとすると、次のエラーが表示されます。

"numeric or value error: character string buffer too small"

誰でもここで私を助けることができますか?

4

1 に答える 1

2

あなたのキャラクターセットは何ですか?

LENGTH関数は、バイト数ではなく文字数を返します。文字列の長さをバイト単位で確認する場合は、関数を使用しLENGTHBます。

ここでの問題は、1 バイトを超える文字を格納するという事実かもしれません。32767 は、文字ではなく( too) 文字列のバイト制限です。したがって、連結後、文字列の文字数は 32767 より少なくなる可能性がありますが、それらすべてを表すためにより多くのバイトを使用する可能性があり、エラーが発生します。VARCHAR2NVARCHAR2buffer too small

続きを読む:

于 2013-11-19T11:10:36.627 に答える