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