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 是(也)字符串的字节限制,而不是字符。因此,在连接之后,您的字符串的字符数可能少于 32767,但它可能会使用更多字节来表示所有字符,并且您会收到错误消息。VARCHAR2NVARCHAR2buffer too small

阅读更多:

于 2013-11-19T11:10:36.627 回答