Создание/модификация глобальной переменной простого типа

Функция

Определение и инициализация глобальной переменной процедурного языка простого типа.

Спецификация
   
< создание/модификация глобальной переменной простого типа >::=
< имя глобальной переменной >::=
< тип данных переменной >::=
CHAR | VARCHAR | INTEGER | SMALLINT | BIGINT | REAL | DOUBLE | DATE | DECIMAL | NUMERIC | NCHAR | NCHAR VARYING | BOOLEAN | BYTE |VARBYTE | BLOB
< значение по умолчанию >::=
Синтаксические правила
  1. < Имя глобальной переменной > должно содержать буквы только латинского алфавита, цифры, символ подчеркивания и символы: @, #, %, ?, ~.

  2. При создании новой глобальной переменной < имя глобальной переменной > должно быть уникальным среди имен всех глобальных переменных в указанной схеме.

  3. Опция OR REPLACE заставляет удалять существующую в БД глобальную переменную и создавать её под тем же именем, возможно, с другим типом данных или значением по умолчанию.

  4. Опция IF NOT EXISTS отменяет выполнение оператора, если указанная глобальная переменная уже существует в БД.

  5. Для глобальных переменных BLOB-типа установка < значение по умолчанию > не поддерживается.

Общие правила
  1. Глобальные переменные предназначены для использования в процедурном языке СУБД ЛИНТЕР (см. документ «СУБД ЛИНТЕР. Процедурный язык», раздел «Глобальные переменные хранимых процедур»).

  2. Созданная глобальная переменная:

    • включается в состав объектов указанной схемы;

    • либо включается в состав текущей схемы (если выполнен SQL-оператор SET SCHEMA) и < имя схемы > не задано;

    • либо её владельцем назначается пользователь, от имени которого выполнена команда создания глобальной переменной.

  3. Для создания/модификации глобальной переменной необходима привилегия RESOURCE.

  4. Максимальная длина значения глобальной переменной типа BYTE/VARBYTE, а также переменной символьного типа 4000 байт.

  5. Значения символьных глобальных переменных (CHAR/VARCHAR) записывается в текущей кодировке соединения, а NCHAR/NCHAR VARYING – UTF-16.

  6. Созданная/модифицированная глобальная переменная без указания < имени схемы > доступна из хранимых процедур СУБД ЛИНТЕР, созданных в той же схеме.

  7. Для доступа к «чужой» глобальной переменной необходимо указывать полное квалификационное имя: < имя схемы >.< имя глобальной переменной >.

Примеры
  1. Создание глобальной переменной:

    create variable company char='RELEX';
    create variable department int=125;
  2. Создание или модификация существующей глобальной переменной:

    create or replace variable department smallint=10;
  3. Получить текущий список глобальных переменных с их схемами:

    select $$$usr.$$$s34,
           $$$glbvars.$$$name
      from $$$glbvars, $$$usr
     where $$$glbvars.$$$owner=$$$usr.$$$s31
       and $$$usr.$$$s32=0;
  4. Получить список символьных (char) и целочисленных (smallint) глобальных переменных:

    select $$$glbvars.$$$name, getstr($$$glbvars.$$$info,10,16)
      from $$$glbvars
     where getbyteb($$$glbvars.$$$info,1)=cast 1 as byte
     union
    select $$$glbvars.$$$name, cast getword($$$glbvars.$$$info,10) as char
      from $$$glbvars
     where getbyteb($$$glbvars.$$$info,1)=cast 2 as byte
       and getword($$$glbvars.$$$info,4) = 2;
    или
    select trim($$$glbvars.$$$name),
      case
        when getbyteb($$$glbvars.$$$info,1)= cast 1 as byte then
          getstr($$$glbvars.$$$info,10,16)
        when getbyteb($$$glbvars.$$$info,1)= cast 2 as byte and
          getword($$$glbvars.$$$info,4) = 2 then
        cast getword($$$glbvars.$$$info,10) as char
      end
    from $$$glbvars;