Типы данных
В языке SQL/89 поддерживаются следующие типы данных: CHARACTER, NUMERIC,DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, DOUBLE PRECISION. Эти типы данных классифицируются на типы строк символов, точных чисел и приблизительных чисел.
К первому классу относится тип CHARACTER. Спецификатор типа имеет вид CHARACTER (length), где length задает длину строк данного типа. Заметим, что в SQL/89 нет типа строк переменного размера, хотя во многих реализациях они допускаются. Литеральные строки символов изображаются в виде "последовательность-символов"(например "example").
Представителями второго класса типов являются NUMERIC, DECIMAL (или DEC), INTEGER (или INT) и SMALLINT. Спецификатор типа NUMERIC имеет вид NUMERIC [(precision [, scale])]. Специфицируются точные числа, представляемые с точностью precision и масштабом scale. Здесь и далее, если опущен масштаб, то он полагается равным 0, а если опущена точность, то ее значение по умолчанию определяется в реализации.
Спецификатор типа DECIMAL (или DEC) имеет вид DECIMAL [(precision [,scale])]. Специфицируются точные числа, представленные с масштабом scale и точностью, равной или большей значения precision.
INTEGER специфицирует тип данных точных чисел с масштабом 0 и определяемой в реализации точностью. SMALLINT специфицирует тип данных точных чисел с масштабом 0 и определяемой в реализации точностью, не большей, чем точность чисел типа INTEGER.
Литеральные значения точных чисел в общем случае представляются в форме[+|-] <целое-без-знака> [.<целое-без-знака>].
Наконец, в классу типов данных приблизительных чисел относятся типы FLOAT, REAL и DOUBLE PRECISION. Спецификатор типа FLOAT имеет вид FLOAT[(precision)]. Специфицируются приблизительные числа с двоичной точностью, равной или большей значения precision.
REAL специфицирует тип данных приблизительных чисел с точностью, определенной в реализации. DOUBLE PRECISION специфицирует тип данных приблизительных чисел с точностью, определенной в реализации и большей, чем точность типа REAL.
Типом называется некий предикат (математическая функция с одним аргументом возвращающее значение логического типа истина/ложь), который определен на множестве всевозможных значений. Значения удовлетворяют этому типу, если результат предиката - истина. Такие значения называются членами типа.
Объектным типом называется тип, членами которого являются объекты, удовлетворяющие данному типу.
Определены следующие основные (базовые) типы данных:
- 16 и 32 разрядные знаковые и беззнаковые целые типы;
- 32 и 64 разрядные типы с плавающей точкой в соответствии с IEEE;
- символьный тип в соответствии с ISO Latin-1 (8859.1);
- логический тип с множеством значений истина и ложь;
- 8 разрядный тип, который гарантированно не подвергается никаким изменениям при передаче между различными системами;
- перечислимые типы, состоящие из последовательности идентификаторов;
- строковый тип, состоящий из последовательности символов переменной длины, длина строки доступна во время выполнения программы;
- тип "any", который может принимать значения всех базовых и составных типов.
Также могут быть определены составные типы:
- структура, состоящая из упорядоченных пар (имя, значение);
- объединение, состоящее из дискриминатора и значения типа, связанного с дискриминатором;
- последовательность, которая является массивом переменной длины значений одного типа, длина последовательности доступна во время выполнения;
- массив фиксированной длины, элементами которого являются значения одного типа;
- тип интерфейс, который определяет множество операций, которое должен поддерживать экземпляр этого типа.
Параметры, представленные в запросе должны удовлетворять одному из перечисленных типов, за исключением типа интерфейс, как показано на рисунке 2-1.