Инициализация дескриптора

Назначение

Выделение необходимой для дескриптора памяти.

Синтаксис
 
<​выделение памяти для дескриптора​>::=
EXEC SQL ALLOCATE DESCRIPTOR <​имя дескриптора​>
[ WITH MAX <​количество описателей​>];
<​имя дескриптора​>::={ идентификатор встроенного SQL
| <​строковый литерал​>
| :<​переменная основного языка типа «дескриптор»​>}
<​количество описателей​>::= {<​числовой литерал​> | :<​переменная основного языка​> }
Описание
  1. <​Числовой литерал​> – целое положительное число в диапазоне от 1 до 32767.

  2. <​Переменная основного языка​> – переменная типа INTEGER с диапазоном значений от 1 до 32767.

  3. Если конструкция 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 – максимальная длина имени индикаторной переменной, которую дескриптор может описывать.

  4. Конструкция <​выделение памяти для дескриптора​> выделяет оперативную память, необходимую для описания <​количества описателей​> в дескрипторе <​имя дескриптора​>, при этом все значения дескриптора являются неопределенными, т.е. никакое начальное значение описателям дескриптора не присваивается.

  5. Если память для данного дескриптора была выделена ранее в той же области видимости переменных и не освобождена, фиксируется ошибочная ситуация.

  6. Если <​количество описателей​> меньше 1 или больше MAX ENTRIES, фиксируется ошибочная ситуация.