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