Приложение B


ТИПЫ ДАННЫХ В SQL

Типы данных, распознаваемые с помощью ANSI, состоят из символов и различных типов чисел, которые могут классифицироваться как точные числа и приблизительные числа.

Точные числовые типы это числа с десятичной точкой или без десятичной точки. Приблизительные числовые типы это числа в показательной (экспоненциальной по основанию 10) записи.

Для всех прочих типов отличия слишком малы чтобы их как-то классифицировать.

Иногда типы данных используют аргумент, который называют размером аргумента, чей точный формат и значение меняется в зависимости от конкретного типа.

Значения по умолчанию обеспечены для всех типов, если размер аргумента отсутствует.

ТИПЫ ANSI

Ниже представлены типы данных ANSI (имена в круглых скобках - это синонимы):

TEXT ТЕКСТ
CHAR (или CHARACTER) Строка текста в реализационно определенном формате. Размер аргумента здесь это единственное неотрицательное целое число, которое ссылается к максимальной длине строки. Значения этого типа должны быть заключены в одиночные кавычки, например, 'text'. Две рядом стоящие одинарные кавычки ('') внутри строки будут пониматься как одна одинарная кавычка (').

ПРИМЕЧАНИЕ:
Здесь и далее фраза Реализационно Определенный или Реализационно Зависимый указывает, что этот аргумент или формат зависит от конкретной программы в которой реализуются данные.

EXACT NUMERIC ТОЧНО ЧИСЛО
DEC (или DECIMAL) Десятичное число, то есть число, которое может иметь десятичную точку. Здесь аргумент размера имеет две части: точность и масштаб. Масштаб не может превышать точность. Сначала указывается точность, затем - разделительная запятая и далее - аргумент масштаба. Точность указывает, сколько значащих цифр имеет число. Максимальное десятичное число, составляющее число - реализационно определённое значение, равное или больше, чем этот номер. Масштаб указывает максимальное число цифр справа от десятичной точки. Масштаб = нулю делает поле эквивалентом целого числа.
NUMERIC Такое же, как DECIMAL, за исключением того, что максимальное десятичное не может превышать аргумента точности.
INT (или INTEGER) Число без десятичной точки. Эквивалентно DECIMAL, но без цифр справа от десятичной точки, то есть с масштабом, равным 0. Аргумент размера не используется (он автоматически устанавливается в реализационно-зависимое значение).
SMALLINT Такое же, как INTEGER, за исключением того, что, в зависимости от реализации, размер по умолчанию может (или может не) быть меньшее чем INTEGER.
APPROXIMATE NUMERIC Приблизительное число
FLOAT Число с плавающей запятой на базе 10 показательной функции. Аргумент размера состоит из одного числа, определяющего минимальную точность.
REAL Такое же, как FLOAT, за исключением того, что никакой аргумент размера не используется. Точность установлена по умолчанию как реализационно зависимая.
DOUBLE PRECISION (или DOUBLE) Такое же, как REAL, за исключением того, что реализационно определяемая точность для DOUBLE PRECISION должна превышать реализационно определяемую точность REAL.

ЭКВИВАЛЕНТНЫЕ ТИПЫ ДАННЫХ В ДРУГИХ ЯЗЫКАХ

Когда используется вложение SQL в другие языки, значения, используемые и произведённые командами SQL, обычно сохраняются в переменных главного языка (см. Главу 25). Эти переменные должны иметь тип данных, совместимый со значениями SQL, которые они будут получать.

В дополнениях, которые не являются частью официального SQL-стандарта, ANSI обеспечивает поддержку при использовании вложения SQL в четыре языка: Паскаль, PL/I, КОБОЛ, и ФОРТРАН. Между прочим, он включает определение эквивалентов SQL для данных типов переменных, используемых в этих языках.

Эквиваленты типов данных четырёх языков, определенные ANSI:

PL/I

SQL ТИП ЭКВИВАЛЕНТ PL/I
CHAR CHAR
DECIMAL FIXED DECIMAL
INTEGER FIXED BINARY
FLOAT FLOAT BINARY

КОБОЛ

SQL ТИП ЭКВИВАЛЕНТ КОБОЛА
CHAR () PIC X ()
INTEGER PIC S () USAGE COMPUTTATIONAL
NUMERIC PIC S (< nines with embedded V >) DISPLAY SING LEADING SEPERATE

ПАСКАЛЬ

SQL ТИП ЭКВИВАЛЕНТ ПАСКАЛЯ
INTEGER INTEGER
REAL REAL
CHAR () PACKED ARRAY [1..] OF CHAR

ФОРТРАН

SQL ТИП ЭКВИВАЛЕНТ ФОРТРАНА
CHAR CHAR
INTEGER INTEGER
REAL REAL
DOUBLE PRECISION DOUBLE PRECISION