Индикаторные переменные основного языка
Назначение
С каждой переменной основного языка можно связать ее индикаторную переменную. С помощью индикаторных переменных выполняются следующие операции:
-
присвоение NULL-значений загружаемой в БД информации (полям таблиц БД) и/или входным переменным хранимых процедур;
-
проверка на NULL-значение выбранной из БД информации и/или выходных переменных хранимых процедур;
-
проверка усечения данных и/или выходных переменных хранимых процедур при загрузке их в переменные основного языка.
Синтаксис
-
Индикаторная переменная должна иметь тип
short
. -
Объявление индикаторных переменных, как и переменных основного языка, должно выполняться в секции объявления переменных встроенного SQL.
-
В предложениях встроенного SQL индикаторная переменная (если используется) указывается одновременно со связанной с нею переменной основного языка через символ «двоеточие»:
< основная переменная >:< индикаторная переменная >
-
Если переменная основного языка – массив, то индикаторная переменная должна быть массивом того же размера.
Описание
-
Взаимосвязь индикаторной и основной переменной (см. таблицу 3).
Таблица 3. Взаимосвязь индикаторной и основной переменнойЗначение индикаторной переменной Значение соответствующей переменной основного языка нуль присвоенное значение не нуль NULL-значение
Примечание
Если исходный модуль претранслирован в режиме совместимости со старой версией прекомпилятора встроенного SQL (ключ -V), то индикаторная переменная принимает значение 1 для NULL-значений; иначе (по умолчанию) – значение -1.
-
Для передачи NULL-значений необходимо установить индикаторную переменную до исполнения предложения встроенного SQL.
-
Если на этапе выполнения при привязке параметров или при получении результата возникла ошибка ErrPCI_TooLong либо ErrPCI_IncTyp, то индикаторная переменная будет содержать длину данных параметра до усечения (для типов данных CHAR, BIT, VARCHAR, VARBIT).
-
Одна и та же индикаторная переменная может последовательно использоваться с разными переменными основного языка. Однако если она использована в одном и том же SQL-операторе с несколькими переменными одновременно, ее значение не будет соответствовать реально выбранным из БД данным.
Пример
SELECT some_col INTO :var:indicator FROM SOME_TBL …