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

Назначение

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

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