Переменные типа VARCHAR2 хранят строки символов переменной длины (собственно Var - variable, Char - character). При объявлении строки переменной длины, нужно также определить ее максимальную длину, которая может колебаться от 1 до 32 767 байтов. Максимальная длина может быть задана в байтах или символах, но в любом случае для строки будет выделено определенное количество байтов. Если максимальная длина строковой переменной VARCHAR2 задается в символах (с использованием CHAR), фактическая длина в байтах определяется на основе наибольшего числа байтов, используемого для предоставления одного символа в наборе символов базы данных. Например, Unicode UTF-8 кодировка использует до трех байтов для некоторых символов; таким образом, если UTF-8 – Ваша основная кодировка, объявление переменной VARCHAR2 с максимальной длиной 100 символов эквивалентна объявлению той же самой переменной с указанием длины 300 байт. Максимальная длина переменной VARCHAR2 в PL/SQL составляет 32 767 байтов – гораздо больше, чем максимальная длина переменной типа данных VARCHAR2 в базе данных Oracle (2 000 байтов до Базы данных Oracle8i, и 4 000 байтов в Базе данных Oracle8i и выше). Это ограничение действует независимо от того, объявляете ли Вы размер переменной в символах или байтах. Ни PL/SQL ни SQL автоматически не решают эту несогласованность. Вот собственно об этом "ворчуне2", я и говорил...