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