Типы данных
В процедурном языке СУБД ЛИНТЕР поддерживаются простой и составной типы данных.
Определение типов данных.
Спецификация
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
Синтаксические правила
Простой тип данных
-
BIGINT
– используется для представления целых знаковых чисел в диапазоне от -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807. -
INTEGER (INT)
– используется для представления целых знаковых чисел в диапазоне от -2 147 483 648 до +2 147 483 647. -
SMALLINT
– используется для представления целых знаковых чисел в диапазоне от -32 768 до +32 767. -
REAL
– используется для представления чисел с плавающей точкой одинарной точности (значения в диапазоне от -1.0E+38 до +1.0E+38, точность – 6 значащих цифр). -
DOUBLE
– используется для представления чисел с плавающей точкой двойной точности (значения от -1.0E+38 до +1.0E+38, точность – 15 значащих цифр). -
NUMERIC
– используется для представления чисел с фиксированной точкой (целое или дробное) с максимальным масштабом (количество цифр справа от десятичной точки), равным 10, и точностью (максимальное число значащих цифр), равной 30. -
CHAR(< размер >)
– используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде текстовой строки фиксированной длины (до 3910 знаков).Примечание
Максимальная длина строковых типов данных процедурного языка отличается от максимальной длины строковых типов данных языка SQL СУБД ЛИНТЕР.
-
VARCHAR(< размер >)
– используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде текстовой строки переменной длины (до 3910 знаков). -
BYTE(< размер >)
– используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде шестнадцатеричной строки фиксированной длины (до 3910 знаков). -
VARBYTE(< размер >)
– используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде шестнадцатеричной строки переменной длины (до 3910 знаков). -
NCHAR(< размер >)
– используется для представления UNICODE-строки фиксированной длины (до 1955 знаков). -
NVARCHAR(< размер >)
– используется для представления UNICODE-строки переменной длины (до 1955 знаков).Примечание
Длина строковых и байтовых типов данных может меняться от версии к версии – как в сторону уменьшения, так и в сторону увеличения.
-
DATE
– используется для представления информации о дате и времени.Информация задается в формате:
DD.MM.YYYY[:HH[:MI[:SS[.FF]]]]
.В таблице 2 приведены значения формата представления информации о дате и времени.
Таблица 2. Значения формат представления информации о дате и времениМаска Единицы Диапазон DD
день месяца (от 1 до 31) MM
месяц года (от 1 до 12) YYYY
год (от 1 до 9999) HH
часы (от 0 до 23) MI
минуты (от 0 до 59) SS
секунды (от 0 до 59) FF
тики (от 0 до 99)
Примечание
Допустима нулевая дата 00.00.0000:00:00:00:00
-
BOOL
– используется для представления логической информации. Допустимыми значениями являются TRUE и FALSE. -
BLOB-значения
– неструктурированные значения большого объема (Binary Large OBject). Максимальный размер BLOB-переменной составляет 2 Гбайта. -
Работа с BLOB-значениями выполняется с помощью встроенных функций процедурного языка (см. раздел Работа с типом данных BLOB).
Примечание
С точки зрения процедурного языка тип данных BLOB является типом данных varbyte.
Составной тип данных
-
Тип данных
CURSOR
– используется для задания структуры данных, соответствующей полям таблицы или представления базы данных. -
В процедурном языке поддерживаются одномерные безразмерные массивы.
-
Совместимость типов данных: для символьных выражений, дат и логических типов данных совместимы только сами эти типы. Для числовых выражений совместимы любые числовые типы.
Тип данных объекта
-
Если в конструкции
TYPEOF()
< имя объекта >
не заключено в двойные апострофы, то оно будет приведено к верхнему регистру. Заключенное в двойные апострофы будет передано без изменения регистра. Допустимо с помощью двойных апострофов указывать запрещенные символы в имени объекта. Например,TYPEOF("$$$USR.$$$S34")
. -
Правило определения объекта в конструкции
TYPEOF()
:-
если задано полное квалификационное
< имя схемы >.< имя объекта >.< имя столбца >
(например,TYPEOF(SYSTEM.AUTO.PERSONID)
), тоTYPEOF()
применяется к указанному объекту. -
если квалификационное имя задано не полностью (например, TYPEOF(a.b)), то:
-
предполагается вариант
< имя объекта >.< имя столбца >
для текущего пользователя; -
предполагается вариант
< имя схемы >.< имя объекта >
.
-
-
если в конструкции
TYPEOF()
< имя объекта >
задано без символов-разделителей (т.е. без точек), то оно ищется в следующей очередности:-
среди глобальных переменных процедурного языка;
-
среди имен базовых таблиц текущего пользователя;
-
среди имен представлений текущего пользователя.
-
-
-
Если < имя объекта > является именем столбца, то будет применен соответствующий простой тип данных.
-
Если < имя объекта > является < именем таблицы > или < именем представления >, то будет создана структура данных, соответствующая структуре записи объекта.
Примеры
1) typeof(SYSTEM.AUTO.NAME); 2) typeof("Склад"."Код_товара"); 3) create or replace table aaa (i int, ch char(3)); insert into aaa values(1, 'abc'); insert into aaa values(2, 'def'); insert into aaa values(3, 'ghi'); create or replace procedure prc_test01() result int for debug declare var i, j, k, l typeof(aaa.i); // var c cursor(i typeof(aaa.i), j typeof(aaa.i), k typeof(aaa.i)); // code open c for "select i, i, i from aaa;"; // l := c.k; // fetch c into i, j, k; // return(i + j + l + k); // end; call prc_test01(); Результат 7 4) create or replace procedure prc_test02(in n1 int) result char(30) declare var make typeof(auto.make); // code execute "select make from auto where personid= ?" using n1 into make; // return "Модель " + make; // end; call prc_test02(1); Результат Модель FORD