Подготовка предложения к выполнению
Назначение
Подготовка предложения 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;
}