在Oracle中附加varchar2长度

时间:2013-11-19 10:55:53

标签: oracle variable-length varchar2

我有一个附加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"

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

你的角色是什么?

LENGTH函数返回字符的计数,而不是字节。如果要检查字节中字符串的长度,请使用LENGTHB函数。

这里的问题可能是您存储占用超过1个字节的字符。 32767是VARCHAR2NVARCHAR2)字符串的字节限制,而不是字符。因此,在连接之后,您的字符串可能具有比32767更少的字符,但是它可能使用更多字节来表示所有字符,并且您得到buffer too small错误。

了解更多: