Типы данных

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

                               

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

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

                               
< строковый тип фиксированной длины >::=
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