Типы данных

В процедурном языке СУБД ЛИНТЕР поддерживаются простой и составной типы данных.

                               

Определение типов данных.

Спецификация

                               
<строковый тип фиксированной длины>::=
CHAR [(длина)]
<строковый тип переменной длины>::=
VARCHAR (длина)
<байтовый тип фиксированной длины>::=
BYTE [(длина)]
<байтовый тип переменной длины>::=
VARBYTE (длина)
<UNICODE тип фиксированной длины>::=
NCHAR [(длина)]
<UNICODE тип переменной длины>::=
NVARCHAR (длина)
<точный числовой тип>::=
NUMERIC [(точность [,масштаб])]
| BIGINT
| {INTEGER | INT}
| SMALLINT
<приближенный числовой тип>::=
{REAL | DOUBLE}
<дата-время тип>::=
DATE
<логический тип>::=
BOOL
<BLOB-тип>::=
BLOB
<длина>::=
<беззнаковое целое>
<точность>::=
<беззнаковое целое>
<масштаб>::=
<беззнаковое целое>
<составной тип данных>::=
<курсор>::=
<массив>::=

Синтаксические правила

Простой тип данных

  1. BIGINT – используется для представления целых знаковых чисел в диапазоне от -9 223 372 036 854 775 808 до +9 223 372 036 854 775 807.

  2. INTEGER (INT) – используется для представления целых знаковых чисел в диапазоне от -2 147 483 648 до +2 147 483 647.

  3. SMALLINT – используется для представления целых знаковых чисел в диапазоне от -32 768 до +32 767.

  4. REAL – используется для представления чисел с плавающей точкой одинарной точности (значения в диапазоне от -1.0E+38 до +1.0E+38, точность – 6 значащих цифр).

  5. DOUBLE – используется для представления чисел с плавающей точкой двойной точности (значения от -1.0E+38 до +1.0E+38, точность – 15 значащих цифр).

  6. NUMERIC – используется для представления чисел с фиксированной точкой (целое или дробное) с максимальным масштабом (количество цифр справа от десятичной точки), равным 10, и точностью (максимальное число значащих цифр), равной 30.

  7. CHAR(<размер>) – используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде текстовой строки фиксированной длины (до 3910 знаков).

    Примечание

    Максимальная длина строковых типов данных процедурного языка отличается от максимальной длины строковых типов данных языка SQL СУБД ЛИНТЕР.

  8. VARCHAR(<размер>) – используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде текстовой строки переменной длины (до 3910 знаков).

  9. BYTE(<размер>) – используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде шестнадцатеричной строки фиксированной длины (до 3910 знаков).

  10. VARBYTE(<размер>) – используется для представления алфавитно-цифровых символов, графических знаков и управляющих кодов в виде шестнадцатеричной строки переменной длины (до 3910 знаков).

  11. NCHAR(<размер>) – используется для представления UNICODE-строки фиксированной длины (до 1955 знаков).

  12. NVARCHAR(<размер>) – используется для представления UNICODE-строки переменной длины (до 1955 знаков).

    Примечание

    Длина строковых и байтовых типов данных может меняться от версии к версии – как в сторону уменьшения, так и в сторону увеличения.

  13. 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

  14. BOOL – используется для представления логической информации. Допустимыми значениями являются TRUE и FALSE.

  15. BLOB-значения – неструктурированные значения большого объема (Binary Large OBject). Максимальный размер BLOB-переменной составляет 2 Гбайта.

  16. Работа с BLOB-значениями выполняется с помощью встроенных функций процедурного языка (см. раздел Работа с типом данных BLOB).

    Примечание

    С точки зрения процедурного языка тип данных BLOB является типом данных varbyte.

Составной тип данных

  1. Тип данных CURSOR – используется для задания структуры данных, соответствующей полям таблицы или представления базы данных.

  2. В процедурном языке поддерживаются одномерные безразмерные массивы.

  3. Совместимость типов данных: для символьных выражений, дат и логических типов данных совместимы только сами эти типы. Для числовых выражений совместимы любые числовые типы.

Тип данных объекта

  1. Если в конструкции TYPEOF() <имя объекта> не заключено в двойные апострофы, то оно будет приведено к верхнему регистру. Заключенное в двойные апострофы будет передано без изменения регистра. Допустимо с помощью двойных апострофов указывать запрещенные символы в имени объекта. Например, TYPEOF("$$$USR.$$$S34").

  2. Правило определения объекта в конструкции TYPEOF():

    • если задано полное квалификационное <имя схемы>.<имя объекта>.<имя столбца> (например, TYPEOF(SYSTEM.AUTO.PERSONID)), то TYPEOF() применяется к указанному объекту.

    • если квалификационное имя задано не полностью (например, TYPEOF(a.b)), то:

      • предполагается вариант <имя объекта>.<имя столбца> для текущего пользователя;

      • предполагается вариант <имя схемы>.<имя объекта>.

    • если в конструкции TYPEOF() <имя объекта> задано без символов-разделителей (т.е. без точек), то оно ищется в следующей очередности:

      • среди глобальных переменных процедурного языка;

      • среди имен базовых таблиц текущего пользователя;

      • среди имен представлений текущего пользователя.

  3. Если <имя объекта> является именем столбца, то будет применен соответствующий простой тип данных.

  4. Если <имя объекта> является <именем таблицы> или <именем представления>, то будет создана структура данных, соответствующая структуре записи объекта.

    Примеры

    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