2013-11-19 4 views
0

У меня есть процедура оракула, который присоединяет varchar2:Append 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"

Может ли кто-нибудь помочь мне здесь?

ответ

2

Каков ваш набор персонажей?

LENGTH Функция возвращает количество символов, а не байтов. Если вы хотите проверить длину строки в байт, используйте функцию LENGTHB.

Проблема может заключаться в том, что вы храните символы, которые занимают более 1 байт. 32767 - это байт предел для VARCHAR2 (NVARCHAR2) строка, а не символы. Итак, после конкатенации ваша строка может иметь меньше символов, чем 32767, но она может использовать больше байтов для представления всех из них, и вы получите ошибку buffer too small.

Подробнее:

Смежные вопросы