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