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