Добавить длину varchar2 в Oracle

У меня есть процедура оракула, которая добавляет varchar2:

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"

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


person user1051434    schedule 19.11.2013    source источник


Ответы (1)


Какой у вас набор символов?

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

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

Читать далее:

person Przemyslaw Kruglej    schedule 19.11.2013