Подготовка предложения к выполнению
Назначение
Подготовка предложения SQL к выполнению.
Синтаксис
< подготовка предложения >::=
EXEC SQL [ AT< переменная типа «соединение» > ]
PREPARE < переменная типа «предложение» >
FROM < предложение >;
< предложение >::=
{< предложение SQL >
|< строковый литерал >
|< переменная основного языка >}
Описание
-
< Переменная типа «предложение» >не обязательно должна быть ранее объявлена в оператореDECLARE STATEMENT. -
< Предложение SQL >может быть любым исполняемым предложением СУБД ЛИНТЕР. Оно может содержать входные и выходные именованные и неименованные параметры. После выполненияPREPAREименованные параметры будут привязаны к предложению, и станет возможным его дальнейшее выполнение без повторной привязки параметров (т.е. без выполнения операторовUSING,INTO). -
Если
< предложение >представлено < строковым литералом > или < переменной основного языка >, то его текст неизвестен во время прекомпиляции. Для работы с такими предложениями используется динамический SQL. -
В результате выполнения оператора
PREPAREс указанной переменной встроенного языка типа «предложение» связываются заданный текст предложения SQL и набор параметров, подготавливая таким образом предложение к дальнейшему выполнению. -
Подготовленное предложение далее может быть выполнено либо с помощью оператора
EXECUTE, либо (если для него объявлен курсор) с помощью комбинации операторовOPEN,FETCHиCLOSE, при этом во фразахUSINGиINTOможно задавать входные и выходные переменные. -
Необходимо учитывать, что привязанные переменные основного языка должны быть видны в момент исполнения предложения. Т.е. если секция деклараций переменных основного языка содержится в некотором блоке основного языка, то и оператор исполнения предложения, содержащего привязанные переменные, должен содержаться в том же блоке.
Пример
Void f()
{
EXEC SQL MODULE M1;
EXEC SQL BEGIN DECLARE SECTION;
char*Name = “Vasia”; /* строка задана без явного указания длины */
char*Fname = “Pupkin”;
EXEC SQL END DECLARE SECTION;
EXEC SQL DECLARE ST STATEMENT; /* объявили предложение (необязательно) */
EXEC SQL PREPARE ST FROM update person set phone='7779888' where name= :Name and firstnam=:Fname; /* подготовили предложение к выполнению */
EXEC SQL EXECUTE ST; /* выполнили предложение, используя привязанные оператором PREPARE параметры */
EXEC SQL END MODULE M1;
}