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