Возможно многие знают (я даже в этом не сомневаюсь), но может и нет про одну особенность символьного/строчного типа данных в СУБД Oracle именуемым VARCHAR2.
Сначала приведу такой код:
Код:
DECLARE
t_string varchar2(10);
Данный кусок кода говорит нам — мы объявили переменную с типом varchar2. А вот цифра «10» что будет значить? Она не будет значить, что в переменную можно вписать 10 символов. И вот почему.
В символьные/строчные типы данных Oracle можно уместить все, начиная с состоящего из одного символа значения и заканчивая очень большой строкой, которая может иметь размер до 32 кб. В этих типах можно хранить цифры, буквы, двоичные данные и любые другие символы, которая поддерживает СУБД Oracle.
Типы символ/строка определяют свою разрядность (или длину) с помощью целого числа. Поэтому указанное нами число «10» фактически определяет допустимое количество байтов, а не количество символов, которое мы можем записать в переменную. Т.е. мы не поместим в переменную с разрядностью 2 простой 3-х байтовый символ.
Поэтому наш код означает, что в переменную «t_string» можно передать до 10 байтов данных. Чтобы нам можно было передать любое количество символов независимо от количества байтов на один символ , нужно переписать наш код следующим образом:
Код:
DECLARE
t_string varchar2(10 CHAR);
Собственно всё, что я хотел рассказать