Доступные версии документации

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

Назначение

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

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

Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter