- •Модель клиент/сервер
- •Лексические единицы
- •Идентификаторы
- •Зарезервированные слова
- •Ограничители
- •Литералы
- •Комментарии
- •Блок pl/sql
- •Объявление переменных
- •Типы pl/sql
- •Числовые
- •Символьные
- •Семейство типов без обработки
- •Семейство типов даты.
- •Семейство типов rowid
- •Семейство логических типов
- •Семейство типов Trusted
- •Ссылочные типы.
- •Типы lob
- •Записи.
- •Использование %type, %rowtype
- •Подтипы, определяемые пользователями
- •Преобразование типов данных
- •Выражения и операции
- •Присваивание
- •Логические выражения
- •Управляющие структуры pl/sql
- •Операторы goto и метки
- •Использование sql в pl/sql
- •Связи баз данных
- •Ссылки на таблицы
- •Курсоры и курсорные переменные
- •Курсорные атрибуты
- •Циклы выборки
Типы pl/sql
Имеются следующие категории типов: скалярные, составные, ссылочные, LOB (large object). Внутри скалярных типов не содержится никаких компонентов, в то время как в составных типах они присутствуют. Ссылочный тип является указателем на другой тип. Допустимые скалярные типы включают типы, аналогичные тем, которые применяются для определения столбцов таблиц базы данных, и ряд дополнительных типов. Скалярные типы можно разделить на семь семейств: числовые типы, символьные типы, типы без обработки, типы даты, типы ROWID, логические типы и типы Trusted.
Числовые
При помощи семейства числовых типов хранятся целые и действительные значения. Существует три базовых типа: NUMBER, PLS_INTEGER и BINARY_INTEGER. В переменных, имеющих тип NUMBER, можно сохранять как целые, так и действительные величины, а в переменных типа BINARY_INTEGER или PLS_INTEGER — только целые числа.
Синтаксис объявления некоторого числа NUMBER таков:
NUMBER (P,S); где Р— точность (precision), a S — масштаб (scale). Точность — это количество цифр в значении, а масштаб — количество цифр справа от десятичной точки. Использование как точности, так и масштаба необязательно, однако при указании масштаба необходимо указывать и точность. Максимальной точностью является 38 цифр, а масштаб может быть числом в диапазоне от до 127. Тип NUMBER хранится в десятичном представлении, и по этом удобен для хранения в БД, но для использования в вычислениях он ДБ преобразован в двоичное представление. BINARY_INTEGER изначально двоичный, поэтому, если переменная должны быть использована только для вычислений (напр. счетчик цикла), то лучше объявить ее этим типом. Диапазон от до . Тип PLS_INTEGER то же что и BINARY_INTEGER, с тем отличием, что в случае переполнения возникает ошибка, в то время как BINARY_INTEGER просто приводится к NUMBER, диапазон которого дольше.
Символьные
Переменные символьных типов используются для хранения строковых, или символьных, данных. В это семейство входят типы VARCHAR2, CHAR, LONG, NCHAR и NVARCHAR2.
VARCHAR2 аналогичен типу VARCHAR2, применяемому в базах данных. При помощи переменных типа VAROHAR2 можно хранить строки символов переменной длины. Синтаксис объявления переменной, имеющей тип VARCHAR2 таков:
VARCHAR2(L);
где L — максимальная длина (length) переменной в байтах. Если используются многобайтовые символы, то длина строки будет в m раз меньше (m - количество байт на символ). Указание длины обязательно — значения по умолчанию не существует. Максимальная длина переменной типа VARCHAR2 составляет 32 767 байтов. Обратите внимание, что в поле столбца базы данных, имеющем тип VARCHAR2, можно хранить только 4000 байтов ( В версии младше Oracle8 эта цифра 2000). Если длина переменной типа VARCHAR2 PL/SQL превышает 4000 байтов, ее можно ввести лишь в столбец базы данных, имеющий тип LONG, максимальный размер которого составляет 2 ГБ. Аналогично, данные LONG нельзя выбрать в переменную VARCHAR2, если их размер превышает 32767 байтов.
Переменные типа CHAR представляют собой строки символов фиксированной длины. Синтаксис объявления переменной CHAR таков:
CHAR(L);
где L — максимальная длина в байтах (с многобайтовыми символами ситуация как у VARCHAR2). Однако, в отличие от типа VARCHAR2 указание длины необязательно. Если она не указана, принимается значение по умолчанию 1, причем круглые скобки нс нужны. Переменные типа CHAR имеют фиксированную длину, поэтому при необходимости они заполняются до максимальной длины пробелами. Ограничение на длину в БД - 255 байтов до Oracle8 и 2000 байтов после включительно.
Тип LONG аналогичен VARCHAR2 и его максимальная длина 32760 байт. Но БД максимальная длина 2 ГБ, и как следствие в БД можно писать без проблем, а обратно возможны ошибки.
Переменные типов NCHAR и NVARCHAR2 описываются точно так же, как и переменные типов CHAR и VARCHAR2. Однако длина может меняться в зависимости от применяемого национального набора символов. Если в таком наборе размер символов фиксирован, длина указывается в символах. Если же их размер непостоянен, длина указывается в байтах.
При необходимости Oracle автоматически преобразует символьные переменные, для которых применяются разные наборы символов. Это может происходить, когда информация посредством связи баз данных передается из одной базы в другую, причем каждая из них использует свой набор символов.