Подготовка предложения к выполнению

Назначение

Подготовка предложения SQL к выполнению.

Синтаксис

   
< подготовка предложения >::=
EXEC SQL [ AT< переменная типа «соединение» > ]
  PREPARE < переменная типа «предложение» >
  FROM < предложение >;
  < предложение >::=
  {< предложение SQL >
  |< строковый литерал >
  |< переменная основного языка >}

Описание

  1. < Переменная типа «предложение» > не обязательно должна быть ранее объявлена в операторе DECLARE STATEMENT.

  2. < Предложение SQL > может быть любым исполняемым предложением СУБД ЛИНТЕР. Оно может содержать входные и выходные именованные и неименованные параметры. После выполнения PREPARE именованные параметры будут привязаны к предложению, и станет возможным его дальнейшее выполнение без повторной привязки параметров (т.е. без выполнения операторов USING, INTO).

  3. Если < предложение > представлено < строковым литералом > или < переменной основного языка >, то его текст неизвестен во время прекомпиляции. Для работы с такими предложениями используется динамический SQL.

  4. В результате выполнения оператора PREPARE с указанной переменной встроенного языка типа «предложение» связываются заданный текст предложения SQL и набор параметров, подготавливая таким образом предложение к дальнейшему выполнению.

  5. Подготовленное предложение далее может быть выполнено либо с помощью оператора EXECUTE, либо (если для него объявлен курсор) с помощью комбинации операторов OPEN, FETCH и CLOSE, при этом во фразах USING и INTO можно задавать входные и выходные переменные.

  6. Необходимо учитывать, что привязанные переменные основного языка должны быть видны в момент исполнения предложения. Т.е. если секция деклараций переменных основного языка содержится в некотором блоке основного языка, то и оператор исполнения предложения, содержащего привязанные переменные, должен содержаться в том же блоке.

Пример

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;
}