16.3. Встроенный SQL
Поскольку в стандарте SQL/89 не
специфицированы (даже в
приложениях) правила встраивания SQL
в язык Си, мы приведем только общие
синтаксические правила
встраивания, используемые для
любого языка. Это поможет оценить
"степень стандартности"
конкретной реализации.
<embedded SQL statement> ::=
<SQL prefix>
{ <declare cursor>
| <embedded exception declaration>
| <SQL statement>}
[<SQL terminator>]
<SQL prefix> ::= EXEC SQL
<SQL terminator> ::= END EXEC | ;
<embedded SQL declare section> ::=
<embedded SQL begin declare>
(<host variable definition>...]
<embedded SQL end declare>
<embedded SQL begin declare> ::=
<SQL prefix> BEGIN DECLARE SECTION [<SQL terminator>]
<embedded SQL end declare> ::=
<SQL prefix> END DECLARE SECTION [<SQL terminator>]
<embedded variable name> ::= :<host identifier>
<embedded exception declaration> ::=
WHENEVER <condition> <exception action>
<condition> ::= SQLERROR | NOT FOUND
<exception action> ::= CONTINUE | <go to>
<go to> ::= { GOTO | GO TO } <target>
<target> ::= :<host identifier> | <unsigned integer>
Встраиваемые операторы SQL,
включая объявления курсора, а также
разделы объявления исключительных
ситуаций и переменных основной
программы, должны быть окружены
скобками EXEC SQL и END EXEC. Объявление
курсора должно встречаться
текстуально раньше любого
оператора, ссылающегося на этот
курсор. Все переменные основной
программы, используемые во
встроенных операторах SQL, должны
быть объявлены в текстуально
предшествующем этому оператору
разделе объявления переменных
основной программы. При этом
синтаксис объявления переменной
соответствует синтаксису
основного языка программирования,
но имени переменной предшествует
двоеточие.
Механизм обработки
исключительных ситуаций в SQL/89
исключительно прост (можно сказать,
примитивен). Можно задавать реакцию
на возникновение двух видов
условий: SQLERROR - это условие
появления в переменной SQLCODE после
выполнения встроенного оператора
отрицательного значения; NOT FOUND -
условие появления в SQLCODE значения
+100 (этот код означает исчерпание
курсора). Реакция может состоять в
выполнении безусловного перехода
на метку основной программы
(действие GO TO), или отсутствовать
(действие CONTINUE). Срабатывает тот
оператор определения реакции на
исключительную ситуацию, который
текстуально ближе от начала
программы к данному оператору SQL.
Заметим, что во многих
реализациях поддерживается два
вида кодов ответа при выполнении
операторов SQL (встроенных или
взятых из модуля): через переменную
SQLCODE с кодами ответа,
представляемыми целыми числами и
через переменную SQLSTATE с кодами
ответа, кодируемыми десятичными
числами, представленными в
текстовой форме. Имеется тенденция
к переходу на использование только
механизма SQLSTATE, но в стандартных
реализациях должен поддерживаться
механизм SQLCODE.
Предыдущая
глава || Оглавление
|| Следующая глава
|