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

Назначение

Привязка динамических параметров подразумевает получение информации о загружаемых столбцах или динамических параметрах, содержащихся в подготовленном к выполнению предложении 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 отпадает.