Привязка динамических параметров

Назначение

Привязка динамических параметров подразумевает получение информации о загружаемых столбцах или динамических параметрах, содержащихся в подготовленном к выполнению предложении SQL, и загрузку ее в дескриптор, т.е. автоматическое формирование дескрипторов для подготовленного предложения.

Синтаксис
 

Прекомпилятор встроенного SQL распознает и обрабатывает два формата данного предложения:

  • формат 1 – синтаксис, используемый в предыдущих версиях прекомпилятора и оставленный для совместимости с разработанными приложениями, не рекомендуется для использования в новых проектах;

  • формат 2 – синтаксис данной версии прекомпилятора.

Формат 1 (устаревший):

<​привязка входных параметров​>::=
EXEC SQL DESCRIBE BIND VARIABLES FOR <​имя предложения​>
INTO <​имя дескрипторной переменной типа t_sqlda)​>;

Формат 2:

<​привязка входных параметров​>::=
EXEC SQL DESCRIBE INPUT <​имя предложения​>
{ USING | INTO } SQL DESCRIPTOR <​имя дескриптора​>;

Формат 1 (устаревший):

<​привязка выходных параметров​>::=
EXEC SQL DESCRIBE SELECT LIST FOR <​имя предложения​>
INTO <​имя дескрипторной переменной типа t_sqlda ​>;

Формат 2:

<​привязка выходных параметров​>::=
EXEC SQL DESCRIBE [ OUTPUT ] <​имя предложения​>
{ USING | INTO } SQL DESCRIPTOR <​имя дескриптора​>;
Описание
  1. <​Имя предложения​> – переменная прекомпилятора, которая должна быть ранее объявлена в DECLARE STATEMENT или использована в операторе PREPARE.

  2. <​Имя дескриптора​> – переменная встроенного языка, должна быть уникальной или переменной основного языка типа DESCRIPTOR. В этом случае перед именем ставится двоеточие.

  3. Дескриптору <​имя дескриптора​> необходимо предварительно выделить память (оператор ALLOCATE DESCRIPTOR) для описателей, число которых должно быть не меньше числа динамических параметров в <​имени предложения​>.

  4. Привязка выходных параметров допустима только для select-запросов и вызова хранимых процедур.

  5. Так как привязка дескриптора выполняется к уже подготовленному предложению, информация о количестве входных и выходных параметров, их типах, длинах, точности представления данных и др. (кроме значений параметров) известна, поэтому при выполнении оператора все сведения автоматически вносятся в дескриптор.

  6. Значения входным параметрам должны присваиваться приложением с помощью оператора SET DESCRIPTOR (или путем явного присвоения значений полям структуры sqlda, соответствующей данному дескриптору, что строго не рекомендуется).

  7. Для select-запросов (для каждого выбираемого значения) в описатель параметра заносятся имя, тип и длина выбираемого значения. Если для выбираемого имени задан псевдоним, в описатель параметра помещается имя псевдонима.

  8. Если предложение является конструкцией UNION c несколькими select-запросами, то в качестве имен параметров используются имена из первого select-запроса.

  9. Для хранимых процедур для каждого параметра процедуры типа OUT, INOUT в описатель параметра заносятся имя, тип и длина выбираемого значения.

  10. Оператор SQL DESCRIBE используется для получения информации о параметрах динамического предложения SQL.

  11. Оператор SET DESCRIPTOR применяется в следующих случаях:

    • для привязки переменных основного языка путем задания атрибутов TYPE, LENGTH, DATA основной переменной;

    • при заполнении описателей параметров в дескрипторе для еще не подготовленного предложения. В этом случае после подготовки предложения необходимость в операторе SQL DESCRIBE отпадает.