Составитель: В. Кравчук , Copyright (C) 1999
ВСЕ В ЭТОЙ КНИГЕ МОЖЕТ ОКАЗАТЬСЯ ОШИБКОЙ.
Ричард Бах, "Иллюзии"
При описании синтаксиса языка SPL использованы расширенные формулы
Бэкуса-Наура (БНФ). Приведем сначала контекстно-свободную
грамматику, порождающую язык этих формул (символ --> является
метасимволом, отделяющим левую часть правила грамматики от правой,
терминальные символы выделены моноширинным шрифтом, а нетерминальные -
наклонным и взяты в угловые скобки):
<формула > -->
<нетерминал > ::= <сложная цепочка >
<нетерминал > -->
<;нетерминал ><нетерминальный символ >
<нетерминал > -->
<нетерминальный символ >
<сложная цепочка > -->
<сложная цепочка > | <элемент >
<сложная цепочка > -->
<элемент >
<элемент > -->
<простая цепочка >
<элемент > -->
<расширение >
<расширение > -->
[ <сложная цепочка > ]
<расширение > -->
{ <сложная цепочка > }
<простая цепочка > -->
*
<простая цепочка > -->
<простая цепочка ><нетерминал >
<простая цепочка > -->
<простая цепочка ><терминал >
<простая цепочка > -->
<простая цепочка ><расширение >
<терминал > -->
<терминал ><терминальный символ >
<терминал > -->
<терминальный символ >
При этом <терминальный символ > принадлежит конечному множеству
терминальных символов описываемого языка, а <нетерминальный символ >
принадлежит множеству нетерминальных символов описываемого языка.
Это может быть выражено добавлением соответствующего количества
правил по одному на каждый возможный символ. Символ * используется
как метасимвол для обозначения пустой цепочки. Метасимвол |
обозначает, что данная формула является сокращенной записью
нескольких формул с одинаковыми левыми частями и различными
цепочками в правой части (т. е. возможен один из разделенных этим
символом вариантов). Пара метасимволов [ ] используется для
обозначения того, что находящаяся между ними цепочка может
содержаться, а может и не содержаться в правой части формулы. Пара { }
означает, что содержащаяся между ними цепочка может повторяться ноль
или более раз.
Язык таких расширенных формул Бэкуса-Наура позволяет более кратко и
понятно для человека задавать грамматику определяемого языка. Можно
легко доказать (путем описания алгоритма построения), что по любой
грамматике, заданной с использованием этих формул, можно построить
соответствующую ей контекстно-свободную грамматику, порождающую тот
же язык. Очевидно, имеет место и обратное утверждение (предложенная
грамматика содержит язык контекстно-свободных грамматик с точностью
до замены метасимволов --> и ::= ). Таким образом, расширенные БНФ
являются просто способом сокращенной записи контекстно-свободных
грамматик.
Примечание
Обратите внимание, что в документации Informix ,
используются синтаксические диаграммы. Выбранный нами вариант
расширенных БНФ проще для набора и чаще используется в
общедоступной литературе (см. например [Вирт], [Джехани]).
Синтаксические формулы сгруппированы по разделам. Порядок
следования разделов соответствует порядку описания соответствующих
языковых конструкций в данном документе.
Примечание
Нетерминальные символы SPL (определяемые понятия, конструкции и
операторы языка) взяты в угловые скобки и выделены наклонным шрифтом.
Терминальные символывыделены моноширинным шрифтом.
Некоторые нетерминальные символы (например, <буква >) не
раскрываются до терминальных. Мы опишем их неформально, если
возможные значения не очевидны.
<идентификатор > ::=
<первый символ >{<следующий символ }
| <идентификатор в кавычках >
<первый символ > ::=
<буква >
| <подчеркивание >
<следующий символ > ::=
<буква >
| <цифра >
| <подчеркивание >
<идентификатор в кавычках > ::=
" <произвольный символ >
{<произвольный символ >}"
Имена баз данных
<имя базы данных > ::=
<локальное имя базы данных >[@ <имя сервера >]
| '// <имя сервера >/ <локальное имя базы данных >'
| <имя переменной >
| '// <имя сервера >/ <путь >/ <локальное имя базы данных >'
| '/ <путь >/ <локальное имя базы данных >@ <имя сервера >'
<локальное имя базы данных > ::=
<идентификатор >
<имя сервера > ::=
<идентификатор >
Имена сущностей базы данных
<имя переменной > ::=
<идентификатор >
<имя столбца > ::=
<идентификатор >
<имя синонима > ::=
[<имя базы данных > : ][<владелец >. ]<идентификатор >
<имя таблицы > ::=
[<имя базы данных > : ][<владелец >. ]<идентификатор >
<имя представления > ::=
[<имя базы данных > : ][<владелец >. ]<идентификатор >
<имя триггера > ::=
[<имя базы данных > : ][<владелец >. ]<идентификатор >
<имя процедуры > ::=
[<имя базы данных > : ] [<владелец >. ]<идентификатор >
<владелец > ::=
<имя владельца >
| ' <имя владельца >'
Числовые литералы
<числовой литерал > ::=
[<знак >] <цифра >{<цифра >} [. {<цифра >}][<степень >]
|[<знак >] . <цифра >{<цифра >}[<степень >]
<степень > ::=
E [<знак >]<цифра >{<цифра >}
<знак > ::=
- | +
<целочисленный литерал > ::=
[<знак >] <цифра >{<цифра >}
Строки в кавычках (строковые литералы)
<строка в кавычках > ::=
' {<символ или одиночные кавычки >}'
| " {<символ или двойные кавычки >}"
<символ или одиночные кавычки > ::=
<символ > | ''
<символ или двойные кавычки > ::=
<символ > | ""
Интервальные литералы
<интервальный литерал > ::=
INTERVAL ( <числовая дата >) <уточнение поля INTERVAL >
<числовая дата > ::=
<гггг >[- <мм >]
| <мм >
| <дд >[<пробел ><время >]
| <время >
<гггг > ::=
<числовой литерал >
<мм > ::=
<числовой литерал >
<дд > ::=
<числовой литерал >
<время > ::=
<чч >[: <минуты-доли секунды >]
<минуты-доли секунды > ::=
<минуты >[: <секунды-доли секунды >]
<секунды-доли секунды > ::=
<секунды >[. <доли секунды >]
<чч > ::=
<числовой литерал >
<минуты > ::=
<числовой литерал >
<секунды > ::=
<числовой литерал >
<доли секунды > ::=
<числовой литерал >
<уточнение поля INTERVAL > ::=
YEAR [( <точность года >) ] TO YEAR
| YEAR [( <точность года >) ] TO MONTH
| MONTH [( <точность >) ] TO MONTH
| DAY [( <точность >) ] <до дня-долей секунды >
| HOUR [( <точность >) ] <до часа-долей секунды >
| MINUTE [( <точность >) ] <до минуты-долей секунды >
| SECOND [( <точность >) ] <до секунды-долей секунды >
| FRACTION <до долей секунды >
<точность года > ::=
<числовой литерал >
<точность > ::=
<числовой литерал >
<до дня-долей секунды > ::=
TO DAY | <до часа-долей секунды >
<до часа-долей секунды > ::=
TO HOUR | <до минуты-долей секунды >
<до минуты-долей секунды > ::=
TO MINUTE | <до секунды-долей секунды >
<до секунды-долей секунды > ::=
TO SECOND | <до долей секунды >
<до долей секунды > ::=
TO FRACTION [( <точность долей секунды >) ]
<точность долей секунды > ::=
<числовой литерал >
Литералы типа даты и времени
<литерал типа даты и времени > ::=
DATETIME ( <числовая дата >) <уточнение полей даты и времени >
<уточнение полей даты и времени > ::=
YEAR <до года-долей секунды >
| MONTH <до месяца-долей секунды >
| DAY <до дня-долей секунды >
| HOUR <до часа-долей секунды >
| MINUTE <до минуты-долей секунды >
| SECOND <до секунды-долей секунды >
| FRACTION <до долей секунды >
<до года-долей секунды > ::=
TO YEAR | <до месяца-долей секунды >
<до месяца-долей секунды > ::=
TO MONTH | <до дня-долей секунды >
<блок операторов > ::=
{<оператор определения переменных > }
{<оператор обработки исключительных ситуаций > }
{<оператор SPL >}
<оператор SPL > ::=
<оператор вызова процедуры >>
| <оператор продолжения цикла >
| <оператор выполнения процедуры >
| <оператор окончания цикла >
| <оператор цикла FOR >
| <оператор цикла FOREACH >
| <условный оператор >
| <оператор присваивания >
| <оператор возбуждения исключительной ситуации >
| <оператор возврата >
| <оператор системного вызова >
| <оператор трассировки >
| <оператор установки файла отладочной информации >
| <оператор цикла WHILE >
| <подмножество SQL-операторов > ;
| BEGIN <блок операторов > END
<выражение > ::=
[<знак > ] <элемент выражения >
{<оператор > [<знак > ]<элемент выражения >}
<элемент выражения > ::=
<столбец >
| <константа >
| <встроенная функция >
| <выражение агрегирования >
| <вызов процедуры >
| <имя переменной >
| <имя переменной процедуры >
| ( <выражение > )
<оператор > ::=
+ | - | * | / | ||
<имя переменной > ::=
<идентификатор >
<имя переменной процедуры > ::=
<идентификатор >
Столбцы
<столбец > ::=
<уточнение имени столбца ><имя столбца> [ [ <первый > , <последний >] ]
| <уточнение имени столбца >ROWID
<уточнение имени столбца > ::=
<имя таблицы > .
| <имя представления > .
| <имя синонима > .
| <псевдоним >.
<первый > ::=
<числовой литерал >
<последний > ::=
<числовой литерал >
Константы
<константа > ::=
<числовой литерал >
| <строка в кавычках >
| <интервальный литерал >
| <литерал типа даты и времени >
| CURRENT [<уточнение полей даты и времени > ]
| USER
| TODAY
| DBSERVERNAME
| SITENAME
| <числовой литерал > UNITS <единица даты или времени >
<единица даты или времени > ::=
YEAR | MONTH | DAY | HOUR
| MINUTE | SECOND | FRACTION [<цифра >]
Встроенные функции
<встроенная функция > ::=
<алгебраическая функция >
| <функция DBINFO >
| <экспоненциальная или логарифмическая функция >
| <функция HEX >
| <функция LENGTH >
| <функция над временем >
| <тригонометрическая функция >
| <функция TRIM >
Алгебраические функции
<алгебраическая функция > ::=
ABS ( <числовое выражение > )
| MOD ( <делимое >, <делитель >)
| POW ( <основание >, <показатель степени >)
| ROOT ( <подкоренное выражение > [, <показатель степени >])
| ROUND ( <выражение > [, <порядок >])
| SQRT ( <подкоренное выражение >)
| TRUNC ( <выражение > [, <порядок >])
<делимое > ::=
<числовое выражение >
<делитель > ::=
<числовое выражение >
<основание > ::=
<числовое выражение >
<показатель степени > ::=
<числовое выражение >
<подкоренное выражение > ::=
<числовое выражение >
<порядок > ::=
<целочисленное выражение >
Функция DBINFO
<функция DBINFO > ::=
DBINFO ( <указатель информации >)
<указатель информации > ::=
'DBSPACE' <указатель табличного пространства >
| 'sqlca.sqlerrd1'
| 'sqlca.sqlerrd2'
<указатель табличного пространства > ::=
<числовое выражение >
Экспоненциальные и логарифмические функции
<экспоненциальная или логарифмическая функция > ::=
EXP ( <числовое выражение > )
| LOGN ( <числовое выражение > )
| LOG10 ( <числовое выражение > )
Функция HEX
<функция HEX > ::=
HEX ( <целочисленное выражение > )
Функция LENGTH
<функция LENGTH > ::=
LENGTH ( <аргумент LENGTH >)
<аргумент LENGTH > ::=
<строка в кавычках >
| <имя переменной >
| [<уточнение имени столбца > ]<имя столбца >
Функции над временем
<функция над временем > ::=
DATE ( <выражение типа не-DATE > )
| <элемент даты > ( <выражение типа даты и времени > )
| EXTEND ( <выражение типа даты и времени >
 [, <уточнение полей даты и времени > ])
| MDY ( <месяц >, <день >, <год >)
<элемент даты > ::=
DAY | MONTH | WEEKDAY | YEAR
<месяц > ::=
<целочисленное выражение >
<день > ::=
<целочисленное выражение >
<год > ::=
<целочисленное выражение >
Тригонометрические функции
<тригонометрическая функция > ::=
<прямая тригонометрическая функция > ( <числовое выражение > )
| <обратная тригонометрическая функция > ( <числовое выражение > )
| ATAN2 ( <числовое выражение > , <числовое выражение > )
<прямая тригонометрическая функция > ::=
SIN | COS | TAN
<обратная тригонометрическая функция > ::=
ASIN | ACOS | ATAN
Функция TRIM
<функция TRIM > ::=
TRIM ( [[<уточнение позиции >]<односимвольное выражение > FROM ]
 <символьное выражение > )
<уточнение позиции > ::=
LEADING | TRAILING | BOTH
Выражения агрегирования
<выражение агрегирования > ::=
COUNT(*)
| COUNT ( <уточнение строк >
 [<уточнение имени столбца > ]<имя столбца > )
| <функция агрегирования > ( [<уточнение строк >]
 [<уточнение имени столбца > ]<имя столбца > )
| <функция агрегирования > ( [ALL ] <выражение (подмножество) > )
<уточнение строк > ::=
DISTINCT | UNIQUE
<функция агрегирования > ::=
AVG | MAX | MIN | SUM
Вызовы процедур
<вызов процедуры > ::=
<имя процедуры > ( [<список аргументов >] )
<список аргументов > ::=
<аргумент > {, <аргумент >}
<аргумент > ::=
[<имя параметра > = ] <значение аргумента >
<имяпараметра > ::=
<идентификатор >
<значение аргумента > ::=
<выражение >
| <ограниченный оператор SELECT >
<оператор вызова процедуры > ::=
CALL <имя процедуры > ( [<список аргументов > ] )
[RETURNING <список переменных процедуры >] ;
<список переменных процедуры > ::=
<переменная процедуры >{, <переменная процедуры >}
<переменная процедуры > ::=
<идентификатор >
<оператор выбора > ::=
CASE <выражение >
<вариант > {<вариант >} [<вариант по умолчанию >] END CASE
| <вариант по умолчанию > END CASE
<вариант > ::=
WHEN <константное выражение > THEN
<блок операторов >
<вариант по умолчанию > ::=
ELSE <блок операторов >
Примечание
Константное выражение -- это выражение, элементами которого являются константы .
<оператор продолжения цикла > ::=
CONTINUE <имя оператора цикла > ;
<имя оператора цикла > ::=
FOR | WHILE | FOREACH
<оператор определения переменных > ::=
DEFINE <определение глобальных переменных > ;
| DEFINE <определение переменных > ;
<определение глобальных переменных > ::=
GLOBAL <список имен переменных > <тип и значение по умолчанию >
<список имен переменных > ::=
<имя переменной > {, <имя переменной > }
<тип и значение по умолчанию > ::=
<тип данных SQL (подмножество) > DEFAULT <значение по умолчанию >
| REFERENCES <ссылочный тип > DEFAULT NULL
<ссылочный тип > ::=
BYTE | TEXT
<определение переменных > ::=
<список имен переменных > <тип >
<тип > ::=
<тип данных SQL (подмножество) >
| REFERENCES <ссылочный тип >
| LIKE <ссылка на таблицу или представление >. <имя столбца >
| PROCEDURE
<ссылка на таблицу или представление > ::=
<имя таблицы >
| <имя синонима >
| <имя представления >
<значение по умолчанию > ::=
<числовой литерал >
| <строка в кавычках >
| <интервальный литерал >
| <литерал типа даты и времени >
| CURRENT [<уточнение полей даты и времени > ]
| USER
| TODAY
| NULL
| DBSERVERNAME
| SITENAME
<оператор окончания цикла > ::=
EXIT <имя оператора цикла > ;
<оператор выполнения процедуры > ::=
EXECUTE PROCEDURE <имя процедуры > ( [ <список аргументов > ])
[INTO <хост-переменная >{, <хост-переменная >}]
<оператор цикла FOR > ::=
FOR <имя переменной > <определение значений переменной >
<блок операторов >
END FOR [; ]
<определение значений переменной > ::=
IN ( <группа значений > {, <группа значений >} )
| = <диапазон и шаг >
<группа значений > ::=
<диапазон и шаг >
| <выражение > {, <выражение > }
<диапазон и шаг > ::=
<левое выражение > TO <правое выражение >
[ STEP <выражение приращения > ]
<левое выражение > ::=
<целочисленное выражение >
<правое выражение > ::=
<целочисленное выражение >
<выражение приращения > ::=
<целочисленное выражение >
<оператор цикла FOREACH > ::=
FOREACH <источник строк > <блок операторов >
END FOREACH [; ]
<источник строк > ::=
[<спецификации >] <оператор SELECT INTO >
| EXECUTE PROCEDURE <имя процедуры > ( [<список аргументов > ])
[INTO <список имен переменных > ]
<спецификации > ::=
WITH HOLD
| <имя курсора > [WITH HOLD ] FOR
<имя курсора > ::=
<идентификатор >
<условный оператор > ::=
IF <условие > THEN {<оператор SPL > }
<проверка других условий >
[ELSE <оператор SPL > {<оператор SPL > }] END IF [; ]
<проверка других условий > ::=
{ELIF <условие > THEN <оператор SPL > {<оператор SPL > }}
<условие > ::=
<элемент условия > {<логическая связка > <элемент условия >}
<элемент условия > ::=
[NOT ] <сравнение >
| [NOT ] <условие с подзапросом >
<сравнение > ::=
<выражение > <оператор отношения > <выражение >
| <выражение > [NOT ] BETWEEN <выражение > AND <выражение >
| <выражение > [NOT ] IN ( <значение >{, <значение >})
| [<уточнение имени столбца > ]<имя столбца > IS [NOT ] NULL
| [<уточнение имени столбца > ]<имя столбца > [NOT ] LIKE
 <строка в кавычках > [ESCAPE ' <символ >' ]
| [<уточнение имени столбца > ]<имя столбца > [NOT ] MATCHES
 <строка в кавычках > [ESCAPE ' <символ >' ]
<оператор отношения > ::=
< | <= | > | >= | <> | !=
<значение > ::=
<числовой литерал >
| <строка в кавычках >
| <интервальный литерал >
| <литерал типа даты и времени >
| CURRENT [<уточнение полей даты и времени > ]
| USER
| TODAY
| DBSERVERNAME
| SITENAME
<логическая связка > ::=
AND | OR
<условие с подзапросом > ::=
<подзапрос IN >
| <подзапрос EXISTS >
| <подзапрос ALL/ANY/SOME >
<подзапрос IN > ::=
<выражение > [NOT ] IN ( <подзапрос > )
<подзапрос EXISTS > ::=
[NOT ] EXISTS ( <подзапрос > )
<подзапрос ALL/ANY/SOME > ::=
<выражение > <оператор отношения > [<тип подзапроса >] ( <подзапрос > )
<тип подзапроса > ::=
ALL | ANY | SOME
<оператор присваивания > ::=
LET <имя переменной > {, <имя переменной > } =
<источник значений > {, <источник значений >} ;
<источник значений > ::=
<имя процедуры > ( [<список аргументов > ] )
| <выражение > {, <выражение > }
| ( <оператор SELECT > )
<оператор обработки исключительных ситуаций > ::=
ON EXCEPTION
[IN ( <номер ошибки > {, <номер ошибки >}) ]
[<установка кодов ошибок >] <блок операторов >
END EXCEPTION [WITH RESUME ] [; ]
<номер ошибки > ::=
<целочисленный литерал >
<установка кодов ошибок > ::=
SET <переменная ошибки SQL >
[, <переменная ошибки ISAM >
[, <переменная сообщения об ошибке >]]
<переменная ошибки SQL > ::=
<имя переменной >
<переменная ошибки ISAM > ::=
<имя переменной >
<переменная сообщения об ошибке > ::=
<имя переменной >
<оператор возбуждения исключительной ситуации > ::=
RAISE EXCEPTION <ошибка SQL >
[, <ошибка ISAM > [, <переменная сообщения об ошибке > ]] ;
<ошибка SQL > ::=
<целочисленное выражение >
<ошибка ISAM > ::=
<целочисленное выражение >
<оператор возврата > ::=
RETURN [<выражение > {, <выражение > } [WITH RESUME ]] ;
<оператор системного вызова > ::=
SYSTEM <выражение > ;
<оператор трассировки > ::=
TRACE <команда трассировки > ;
| TRACE <выражение > ;
<команда трассировки > ::=
ON | OFF | PROCEDURE
<оператор установки файла отладочной информации > ::=
SET DEBUG FILE TO <ссылка на файл > [WITH APPEND ]
<ссылка на файл > ::=
' <имя файла >'
| <имя переменной >
| <символьное выражение >
<оператор цикла WHILE > ::=
WHILE <условие > <блок операторов > END WHILE [; ]
<оператор SELECT > ::=
<элемент объединения > {<оператор объединения > <элемент объединения > }
| <ядро оператора SELECT > [<конструкция HAVING > ]
 FOR UPDATE
| <ядро оператора SELECT > [<конструкция группировки > ]
 [<конструкция упорядочивания > ] [<конструкция INTO TEMP > ]
<элемент объединения > ::=
<ядро оператора SELECT > [<конструкция HAVING > ]
 [<конструкция группировки > ]
| <ядро оператора SELECT > [<конструкция группировки > ]
 [<конструкция HAVING > ]
<оператор объединения > ::=
UNION | UNION ALL
<ядро оператора SELECT > ::=
SELECT [<уточнение >] <список выбора > [<конструкция INTO > ]
<конструкция FROM >
[<конструкция WHERE > ]
<уточнение > ::=
ALL | DISTINCT | UNIQUE
Список выбора
<список выбора > ::=
<элемент списка выбора > {, <элемент списка выбора >}
| *
<элемент списка выбора > ::=
<выражение > [[AS ] <псевдоним >]
| [<уточнение имени столбца > ]*
<псевдоним > ::=
<идентификатор >
Конструкция INTO
<конструкция INTO > ::=
INTO <целевая структура > {, <целевая структура >}
<целевая структура > ::=
<переменная данных >[<индикатор >]
| <структура данных >
<переменная данных > ::=
<имя переменной > | <хост-переменная >
<индикатор > ::=
: <индикаторная переменная >
| $ <индикаторная переменная >
| INDICATOR <индикаторная переменная >
Конструкция FROM
<конструкция FROM > ::=
FROM <ссылка на источник > [, <дополнительные источники >]
<ссылка на источник > ::=
<источник > [[AS ] <псевдоним > ]
<источник > ::=
<имя таблицы >
| <имя представления >
| <имя синонима >
<дополнительные источники > ::=
<дополнительный источник > {, <дополнительный источник >}
<дополнительный источник > ::=
<ссылка на источник >
| OUTER <ссылка на источник >
| OUTER ( <ссылка на источник > [, <дополнительные источники > ])
Конструкция WHERE
<конструкция WHERE > ::=
WHERE <элемент условия WHERE > {AND <элемент условия WHERE >}
<элемент условия WHERE > ::=
<условие >
| <соединение >
<соединение > ::=
[<уточнение имени столбца > ]<имя столбца >
<оператор отношения >
[<уточнение имени столбца > ]<имя столбца >
Конструкция HAVING
<конструкция HAVING > ::=
HAVING <условие >
Конструкция группировки
<конструкция группировки > ::=
GROUP BY <ссылка на столбец > {, <ссылка на столбец >}
<ссылка на столбец > ::=
[<уточнение имени столбца > ]<имя столбца >
| <номер столбца >
<номер столбца > ::=
<целочисленный литерал >
Конструкция упорядочивания
<конструкция упорядочивания > ::=
ORDER BY <ссылка на столбец упорядочивания > [<критерий >]
{, <ссылка на столбец упорядочивания > [<критерий >]}
<ссылка на столбец упорядочивания > ::=
<ссылка на столбец >
| <псевдоним столбца >
| ROWID
<критерий > ::=
ASC | DESC
<псевдоним столбца > ::=
<псевдоним >
Конструкция INTO TEMP
<конструкция INTO TEMP > ::=
INTO TEMP <имя временной таблицы > [WITH NO LOG ]
<имя временной таблицы > ::=
<имя таблицы >
Подзапросы
<подзапрос > ::=
<элемент объединения > [<оператор объединения > <подзапрос > ]
<оператор DELETE > ::=
DELETE FROM <ссылка на таблицу или представление >
[WHERE <ссылка на строки >]
<ссылка на строки > ::=
<условие > | CURRENT OF <имя курсора >
<оператор INSERT > ::=
INSERT INTO <ссылка на таблицу или представление >
[<список имен столбцов >] <значения для вставки >
<список имен столбцов > ::=
( <имя столбца > {, <имя столбца > })
<значения для вставки > ::=
<конструкция VALUES >
| <элемент объединения >
| EXECUTE PROCEDURE <имя процедуры > ( [<список аргументов > ])
<конструкция VALUES > ::=
VALUES ( <источник значения > {, <источник значения >})
<источник значения > ::=
<переменная данных > [<индикатор > ]
| <значение по умолчанию >
<оператор UPDATE > ::=
UPDATE <ссылка на таблицу или представление >
SET <одиночное или групповое присваивание >
[WHERE <ссылка на строки > ]
<одиночное или групповое присваивание > ::=
<присваивание столбцу > {, <присваивание столбцу >}
| ( <имя столбца > {, <имя столбца > }) =
 ( <источник данных > {, <источник данных >})
| * = ( <источник данных > {, <источник данных >})
<присваивание столбцу > ::=
<имя столбца > = <источник данных >
<источник данных > ::=
<выражение (кроме агрегирования) >
| ( <подзапрос > )
| NULL
<оператор создания процедуры > ::=
CREATE [DBA ] PROCEDURE
<имя процедуры > ( [<список параметров >])
[<конструкция RETURNING > ]
<блок операторов > END PROCEDURE
[DOCUMENT <строка в кавычках > {, <строка в кавычках > }]
[WITH LISTING IN ' <путь >' ] ;
<список параметров > ::=
<параметр > {, <параметр >}
<параметр > ::=
<имя параметра > <тип параметра > [<значение по умолчанию > ]
| REFERENCES <ссылочный тип > [DEFAULT NULL ]
<имя параметра > ::=
<идентификатор >
<тип параметра > ::=
<тип данных SQL (подмножество) >
| LIKE <ссылка на таблицу или представление > . <имя столбца >
<конструкция RETURNING > ::=
RETURNING <тип возвращаемого значения >
{, <тип возвращаемого значения >} ;
<тип возвращаемого значения > ::=
<тип данных SQL (подмножество) >
| REFERENCES <ссылочный тип >
<оператор создания триггера > ::=
CREATE TRIGGER <имя триггера > <тело триггера >
<тело триггера > ::=
INSERT ON <имя таблицы > <раздел действий >
| INSERT ON <имя таблицы > <ссылки для INSERT >
 <раздел действий по ссылке >
| DELETE ON <имя таблицы > <раздел действий >
| DELETE ON <имя таблицы > <ссылки для DELETE >
 <раздел действий по ссылке >
| <конструкция UPDATE > ON <имя таблицы > <раздел действий >
| <конструкция UPDATE > ON <имя таблицы > <ссылки для UPDATE >
 <раздел действий по ссылке >
<раздел действий > ::=
BEFORE <список действий триггера >
 [FOR EACH ROW <список действий триггера >]
 [AFTER <список действий триггера >]
| FOR EACH ROW <список действий триггера >
 [AFTER <список действий триггера >]
| AFTER <список действий триггера >
<список действий триггера > ::=
<действие триггера > {, <действие триггера >}
<действие триггера > ::=
[WHEN ( <условие > ) ]
( <допустимый оператор в триггере >
{, <допустимый оператор в триггере >})
<допустимый оператор в триггере > ::=
<оператор INSERT >
| <оператор DELETE >
| <оператор UPDATE >
| <оператор выполнения процедуры >
<раздел действий по ссылке > ::=
[BEFORE <список действий триггера > ]
FOR EACH ROW <список действий триггера >
[AFTER <список действий триггера > ]
<ссылки для INSERT > ::=
REFERENCING NEW [AS ] <идентификатор >
<ссылки для DELETE > ::=
REFERENCING OLD [AS ] <идентификатор >
<ссылки для UPDATE > ::=
REFERENCING NEW [AS ] <идентификатор >
| REFERENCING OLD [AS ] <идентификатор >
| REFERENCING NEW [AS ] <идентификатор >
 OLD [AS ] <идентификатор >
| REFERENCING OLD [AS ] <идентификатор >
 NEW [AS ] <идентификатор >
<конструкция UPDATE > ::=
UPDATE [OF <имя столбца > {, <имя столбца > }]
<оператор начала транзакции > ::=
BEGIN WORK
<оператор завершения транзакции > ::=
COMMIT WORK
<операторотката транзакции > ::=
ROLLBACK [WORK ]
<оператор установки уровня изоляции транзакций INFORMIX > ::=
SET ISOLATION TO <уровень изоляции INFORMIX >
<уровень изоляции INFORMIX > ::=
DIRTY READ
| COMMITED READ
| CURSOR STABILITY
| REPEATABLE READ
<оператор установки уровня изоляции транзакций ANSI > ::=
SET TRANSACTION <чтение-запись >
 [, ISOLATION LEVEL <уровень изоляции ANSI >]
| SET TRANSACTION ISOLATION LEVEL <уровень изоляции ANSI >
 [, <чтение-запись >]
| SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED
 [, READ ONLY ]
| SET TRANSACTION READ ONLY
 [, ISOLATION LEVEL READ UNCOMMITED ]
<чтение-запись > ::=
READ WRITE | READ ONLY
<уровень изоляции ANSI > ::=
READ COMMITED
| REPEATABLE READ
| SERIALIZABLE
<оператор установки режима блокировки > ::=
SET LOCK MODE TO <режим блокировки >
<режим блокировки > ::=
WAIT [<секунды >]
| NOT WAIT
<секунды > ::=
<целочисленный литерал >
<оператор блокирования таблицы > ::=
LOCK TABLE <таблица или синоним >
IN <режим блокирования таблицы > MODE
<таблица или синоним > ::=
<имя таблицы >
| <имя синонима >
<режим блокирования таблицы > ::=
SHARE | EXCLUSIVE
<оператор разблокирования таблицы > ::=
UNLOCK TABLE <таблица или синоним >