Инициализация дескриптора
Назначение
Выделение необходимой для дескриптора памяти.
Синтаксис
<выделение памяти для дескриптора>::= 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
, фиксируется ошибочная ситуация.