Привязка динамических параметров
Назначение
Привязка динамических параметров подразумевает получение информации о загружаемых столбцах или динамических параметрах, содержащихся в подготовленном к выполнению предложении 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 < имя дескриптора >;
Описание
< Имя предложения >
– переменная прекомпилятора, которая должна быть ранее объявлена вDECLARE STATEMENT
или использована в оператореPREPARE
.< Имя дескриптора >
– переменная встроенного языка, должна быть уникальной или переменной основного языка типаDESCRIPTOR
. В этом случае перед именем ставится двоеточие.-
Дескриптору
< имя дескриптора >
необходимо предварительно выделить память (операторALLOCATE DESCRIPTOR
) для описателей, число которых должно быть не меньше числа динамических параметров в< имени предложения >
. -
Привязка выходных параметров допустима только для select-запросов и вызова хранимых процедур.
-
Так как привязка дескриптора выполняется к уже подготовленному предложению, информация о количестве входных и выходных параметров, их типах, длинах, точности представления данных и др. (кроме значений параметров) известна, поэтому при выполнении оператора все сведения автоматически вносятся в дескриптор.
-
Значения входным параметрам должны присваиваться приложением с помощью оператора
SET DESCRIPTOR
(или путем явного присвоения значений полям структурыsqlda
, соответствующей данному дескриптору, что строго не рекомендуется). -
Для select-запросов (для каждого выбираемого значения) в описатель параметра заносятся имя, тип и длина выбираемого значения. Если для выбираемого имени задан псевдоним, в описатель параметра помещается имя псевдонима.
-
Если предложение является конструкцией
UNION
c несколькими select-запросами, то в качестве имен параметров используются имена из первого select-запроса. -
Для хранимых процедур для каждого параметра процедуры типа
OUT
,INOUT
в описатель параметра заносятся имя, тип и длина выбираемого значения. -
Оператор
SQL DESCRIBE
используется для получения информации о параметрах динамического предложения SQL. -
Оператор
SET DESCRIPTOR
применяется в следующих случаях:-
для привязки переменных основного языка путем задания атрибутов
TYPE
,LENGTH
,DATA
основной переменной; -
при заполнении описателей параметров в дескрипторе для еще не подготовленного предложения. В этом случае после подготовки предложения необходимость в операторе
SQL DESCRIBE
отпадает.
-