Инициализация дескриптора
Назначение
Выделение необходимой для дескриптора памяти.
Синтаксис
< выделение памяти для дескриптора >::= EXEC SQL ALLOCATE DESCRIPTOR < имя дескриптора > [ WITH MAX < количество описателей >]; < имя дескриптора >::={ идентификатор встроенного SQL | < строковый литерал > | :< переменная основного языка типа «дескриптор» >} < количество описателей >::= {< числовой литерал > | :< переменная основного языка > }
Описание
-
< Числовой литерал >
– целое положительное число в диапазоне от 1 до 32767. -
< Переменная основного языка >
– переменная типаINTEGER
с диапазоном значений от 1 до 32767. -
Если конструкция
WITH MAX
опущена, по умолчанию память выделяется по количеству описателей параметров, задаваемых в директивеEXEC LINTER OPTION MAX ENTRIES
(см. «Максимальный размер дескриптора»).Примечание
В ранних версиях встроенного SQL инициализация дескрипторов выполнялась при помощи функции
sqlald()
, то есть производилась с помощью функций основного языка C/C++, а не встроенного языка. Эта возможность оставлена для совместимости ранее написанных программ с новой версией встроенного SQL, но пользоваться ею в новых проектах строго не рекомендуется.Пример
(старый синтаксис: строго не рекомендуется.)
bind_dp = sqldald(max_vars, max_name, max_ind_name); select_dp = sqldald(max_vars, max_name, max_ind_name);
Функция
sqldald()
имеет следующий прототип:sqldaid(max_vars, max_name, max_ind_name)
где:
max_vars
– максимальное число колонок, которое возможно в конструируемом динамическом запросе;max_name
– максимальная длина имени переменной, которая может быть использована в динамическом запросе;max_ind_name
– максимальная длина имени индикаторной переменной, которую дескриптор может описывать. -
Конструкция
< выделение памяти для дескриптора >
выделяет оперативную память, необходимую для описания< количества описателей >
в дескрипторе< имя дескриптора >
, при этом все значения дескриптора являются неопределенными, т.е. никакое начальное значение описателям дескриптора не присваивается. -
Если память для данного дескриптора была выделена ранее в той же области видимости переменных и не освобождена, фиксируется ошибочная ситуация.
-
Если
< количество описателей >
меньше 1 или большеMAX ENTRIES
, фиксируется ошибочная ситуация.