我有一个附加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"
有人可以帮我吗?
答案 0 :(得分:2)
你的角色是什么?
LENGTH
函数返回字符的计数,而不是字节。如果要检查字节中字符串的长度,请使用LENGTHB
函数。
这里的问题可能是您存储占用超过1个字节的字符。 32767是VARCHAR2
(NVARCHAR2
)字符串的字节限制,而不是字符。因此,在连接之后,您的字符串可能具有比32767更少的字符,但是它可能使用更多字节来表示所有字符,并且您得到buffer too small
错误。
了解更多: