Индикаторные переменные основного языка

Назначение

С каждой переменной основного языка можно связать ее индикаторную переменную. С помощью индикаторных переменных выполняются следующие операции:

  • присвоение NULL-значений загружаемой в БД информации (полям таблиц БД) и/или входным переменным хранимых процедур;

  • проверка на NULL-значение выбранной из БД информации и/или выходных переменных хранимых процедур;

  • проверка усечения данных и/или выходных переменных хранимых процедур при загрузке их в переменные основного языка.

Синтаксис

  1. Индикаторная переменная должна иметь тип short.

  2. Объявление индикаторных переменных, как и переменных основного языка, должно выполняться в секции объявления переменных встроенного SQL.

  3. В предложениях встроенного SQL индикаторная переменная (если используется) указывается одновременно со связанной с нею переменной основного языка через символ «двоеточие»:

    < основная переменная >:< индикаторная переменная >
  4. Если переменная основного языка – массив, то индикаторная переменная должна быть массивом того же размера.

Описание

  1. Взаимосвязь индикаторной и основной переменной (см. таблицу 3).

    Таблица 3. Взаимосвязь индикаторной и основной переменной
    Значение индикаторной переменнойЗначение соответствующей переменной основного языка
    нульприсвоенное значение
    не нульNULL-значение

    Примечание

    Если исходный модуль претранслирован в режиме совместимости со старой версией прекомпилятора встроенного SQL (ключ -V), то индикаторная переменная принимает значение 1 для NULL-значений; иначе (по умолчанию) – значение -1.

  2. Для передачи NULL-значений необходимо установить индикаторную переменную до исполнения предложения встроенного SQL.

  3. Если на этапе выполнения при привязке параметров или при получении результата возникла ошибка ErrPCI_TooLong либо ErrPCI_IncTyp, то индикаторная переменная будет содержать длину данных параметра до усечения (для типов данных CHAR, BIT, VARCHAR, VARBIT).

  4. Одна и та же индикаторная переменная может последовательно использоваться с разными переменными основного языка. Однако если она использована в одном и том же SQL-операторе с несколькими переменными одновременно, ее значение не будет соответствовать реально выбранным из БД данным.

Пример

SELECT some_col INTO :var:indicator FROM SOME_TBL …