В процедурном языке СУБД ЛИНТЕР поддерживаются простой и составной типы данных.
Определение типов данных.
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
::=
Простой тип данных
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 приведены значения формата представления информации о дате и времени.
Маска | Единицы | Диапазон |
---|---|---|
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()
<имя объекта>
задано без символов-разделителей (т.е. без точек), то оно ищется в следующей очередности:
среди глобальных переменных процедурного языка;
среди имен базовых таблиц текущего пользователя;
среди имен базовых таблиц текущего пользователя; затем среди имен представлений текущего пользователя.
Если <имя объекта> является именем столбца, то будет применен соответствующий простой тип данных.
Если <имя объекта> является <именем таблицы> или <именем представления>, то будет создана структура данных, соответствующая структуре записи объекта.
typeof(SYSTEM.AUTO.NAME);
typeof("Склад"."Код_товара");
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
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