Системы обработки информации - язык баз данных SQL

         

Формат


<close statement>::=

CLOSE <cursor name>



Формат


<commit statement>::=

COMMIT WORK



Формат


<declare cursor> ::=

DECLARE <cursor name> CURSOR

FOR <cursor specification>

<cursor specification> ::=

<query expression> [<order by clause>...]

<query expression> ::=

<query term>

| <query expression> UNION [ALL] <query term>

<query term> ::=

<query specification> | (<query expression>)

<order by clause> ::=

ORDER BY <sort specification>

[{,<sort specification>}...]

<sort specification> ::=

{ <unsigned integer> | <column specification> }

[ASC | DESC]



Формат


<delete statement: positioned> ::=

DELETE FROM <table name>

WHERE CURRENT OF <cursor name>



Формат


<delete statement: searched> ::=

DELETE FROM <table name>

WHERE [<search condition>]



Формат


<fetch statement> ::=

FETCH <cursor name> INTO <fetch target list>

<fetch target list> ::=

<target specification>[{,<target specification>}...]



Функция


Устанавливает курсор на следующую строку таблицы и выбирает значения из этой строки.



Общие правила


Курсор должен быть в открытом состоянии.

Курсор переводится в закрытое состояние и разрушается копия <спецификации курсора> (<cursor soecificaton>).



Общие правила


Текущая транзакция завершается.

Закрываются любые курсоры, открытые данной транзакцией.

Любые изменения базы данных, сделанные в текущей транзакции, фиксируются.



Общие правила


Курсор CR должен быть установлен на строку.

Строка, из которой получена текущая строка CR, удаляется.



Общие правила



а) Если не указано <условие поиска> (<search condition>), то удаляются все строки таблицы Т.


б) Если указано <условие поиска> (<search condition>), то условие применяется к каждой строке Т с <именем таблицы> (<table name>), связанным с этой строкой, и все строки, для которых результат <условия поиска> (<search condition>) есть true, удаляются. Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) реально выполняется для каждой строки T и результаты используются в применении <условия поиска> (<search condition>) к данной строке Т. Если любой выполняемый <подзапрос> (<subquery>) содержит внешнюю ссылку на столбец Т, то эта ссылка указывает на значение этого столбца в данной строке Т.


Замечание: "Внешняя ссылка" определяется в , "<спецификация столбца> (<column specification>)".



Общие правила


Курсор CR должен быть в открытом состоянии.

Если таблица, указываемая курсором CR, является пустой, или CR позиционирован на последнюю строку или за ней, то CR устанавливается в позицию после последней строки, параметру SQLCODE присваивается значение 100 и значения не присваиваются целям, идентифицированным в <списке целей чтения> (<fetch target list>).

Если CR установлен в позицию перед строкой, то CR устанавливается на эту строку и значения этой строки присваиваются соответствующим целям.

Если CR установлен на r, где r - это строка, отличная от последней строки, то курсор устанавливается на строку, непосредственно следующую за строкой r, и значения из строки за r присваиваются соответствующим целям.

Присваивание значений целям в <списке целей чтения> (<fetch target list>), кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним.

Если в процессе присваивания значения цели возникает ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации.

Пусть V обозначает цель, а v - соответствующее значение в текущей строке CR.

Если v - это неопределенное значение, то для V должен быть специфицирован индикатор, и этот индикатор устанавливается в -1. Если v - не неопределенное значение, и V обладает индикатором, то:


a) Если тип данных V есть тип символьных строк длины L и длина M v больше L, то индикатор получает значение M.


b) Иначе значение индикатора устанавливается в 0.

Цель, идентифицированная i-той <спецификацией цели> (<target specification>) из <списка целей чтения> (<fetch target list>), соответствует i-ому значению из текущей строки CR.


a) Если тип данных V есть тип символьных строк, и длина v равна длине V, то значением V становится v.


b) Если тип данных V есть тип символьных строк длины L, и длина v больше L, то значением V становятся первые L символов v.


c) Если тип данных V есть тип символьных строк длины L, и длина M v меньше L, то значением первых M символов V становится v, и в последние L-M символов V устанавливаются символы пробела.


d) Если тип данных V есть тип точных чисел, то должно существовать представление значения v в типе данных V такое, чтобы не потерялись какие-либо первые значащие цифры, и значением V становится это представление.


e) Если тип данных V есть тип приблизительных чисел, то значением V становится приблизительное значение v.

| |



Синтаксические правила


Объемлющий модуль должен содержать объявление курсора, в котором используется это же имя курсора.



Синтаксические правила


<Имя курсора> (<cursor name>) не должно быть идентичным любому другому <имени курсора> (<cursor name>), специфицируемого в каком-либо другом <объявлении курсора> (<declare cursor>) того же модуля.

Любое <имя параметра> (<parameter name>), содержащееся в <спецификации курсора> (<cursor specification>), должно быть определено в <объявлении параметра> (<paremeter declaration>) <процедуры> (<procedure>) объемлющего <модуля> (<module>), который содержит <оператор открытия> (<open statement>), специфицирующий это <имя курсора> (<cursor name>).


Замечание: Cм. Синтаксическое правило 7.1, "<модуль> (<module>)".

Пусть Т обозначает таблицу, специфицированную в <спецификации курсора> (<cursor specification>).


a) Если указано ORDER BY, то Т является только читаемой таблицей со специфицированным порядком сортировки.


b) Если не указаны ни ORDER BY ни UNION и <спецификация запроса> (<query specification>) является из меняемой (updatable), то Т - изменяемая таблица.


c) Иначе Т - только читаемая таблица.


a) Если не указано UNION, то описанием Т является описание <спецификации запроса> (<query specification>).


b) Если указано UNION, то пусть для каждого специфицированного UNION Т1 и Т2 обозначают таблицы, которые специфицированы в <выражении запроса> (<query expression>) и <терме запроса> (<query term>). <Список выборки> (<select list>) в спецификациях Т1 и Т2 должен состоять из "*" или <спецификаций столбцов> (<column specification>). Кроме имен столбцов, описания Т1 и Т2 должны быть идентичными. Все столбцы результата неименованы. За исключением <имен столбцов> (<column name>), описание результата такое же, как описание Т1 и Т2.

Если указано ORDER BY, то каждая <спецификация сортировки> (<sort specification>) в <разделе order by> (<order by clause>) должна идентифицировать столбец таблицы Т.



Синтаксические правила


Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать DELETE.


Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в , "<Определение привилегий> (<privileges definition>).

Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе удаления: позиционном> (<delete statement: positioned>).

Таблица, на которую указывает CR, не должна быть только читаемой.

Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т должна быть таблицей, идентифицируемой в первом <разделе from> (<from clause>) в <спецификации курсора> (<cursor specification>) CR.



Синтаксические правила


Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать DELETE.


Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".

Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) любого <подзапроса> (<subquery>), содержащегося в <условии поиска> (<search condition>).

Область действия <имени таблицы> (<table name>) - целиком <оператор удаления: поисковый> (<delete statement: searched>.



Синтаксические правила


Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе чтения> (<fetch statement>). Пусть Т обозначает таблицу, специфицированную через <спецификации курсора> (<cursor specification>) CR.

Число <спецификаций цели> (<target specification>) в <списке целей чтения> (<fetch target list>) должно быть таким же как степень таблицы Т.


а) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) <списка целей чтения> (<fetch target specification>), является типом символьных строк, то тип данных i-ого столбца таблицы Т должен быть типом символьных строк.


b) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) <списка целей чтения> (<fetch target specification>), является типом точных чисел, то тип данных i-ого столбца таблицы Т должен быть типом точных чисел.


c) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) <списка целей чтения> (<fetch target specification>), является типом приблизительных чисел, то тип данных i-ого столбца таблицы Т должен быть типом приблизительных чисел или типом точных чисел.



Формат


<insert statement> ::=

INSERT INTO <table name> [(<insert column list>)]

{VALUES (<insert value list>)|<query specification>}

<insert column list> ::=

<column name> [{,<column name>}...]

<insert value list> ::=

<insert value> [{,<insert value>...]

<insert value> ::=

<value specification> | NULL



Формат


<open statement> ::=

OPEN <cursor name>



Формат


<rollback statement> ::=

ROLLBACK WORK



Формат


<select statement> ::=

SELECT [ALL | DISTINCT] <select name>

INTO <select target list>

<table expression>

<select target list>::=

<target specification> [{,<target specification>}...]



Формат


<update statement: positioned> ::=

UPDATE <table name>

SET <set clause:positioned>

[{,<set clause:positioned>}...]

WHERE CURRENT OF <cursor name>

<set clause: positioned> ::=

<object column:positioned> =

{ <value expressionession> | NULL }

<object column: positioned> ::= <column name>



Формат


<update statement: searched> ::=

UPDATE <table name>

SET <set clause: searched>

[{,<set clause: searched>}...]

[WHERE <search conditions>]

<set clause: searched> ::=

<object column: searched> =

{ <value expression> | NULL }

<object column: searched> ::= <column name>



Функция


Выбирает значения из специфицированной строки таблицы.



Общие правила


Строка вставляется по следующим шагам:


а) Фактически создается возможная строка, как это указано в Общих правилах 6.4, "<Раздел умолчания> (<default clause>)". Если Т - это базовая таблица В, то возможная строка включает каждый столбец В. Если Т - это представляемая таблица, то возможная строка включает каждый столбец базовой таблицы В, из которой порождается Т.


b) Для каждого объектного столбца в возможной строке его значение заменяется на вставляемое значение.


c) Возможная строка вставляется в таблицу В.

Если Т - представляемая таблица, определенная через <определение представления> (<view definition>) с "WITH CHECK OPTION", то если <спецификация запроса> (<query specification>), содержащаяся в <определении представления> (<view definition>), включает <раздел where> (<where clause>), не содержащийся в <подзапросе> (<subquery>), то <условие поиска> (<search condition>) этого <раздела where> (<where clause>) должно быть истинным для возможной строки.

Если указывается <список вставляемых значений> (<insert value list>), то:


а) Если i-ое <вставляемое значение> (<insert value>) из <списка вставляемых значений> (<insert value list>) является <спецификацией значения> (<value specification>), то значение столбца возможной строки, соответствущего i-ому объектному столбцу, является значением этой <спецификации значения> (<value specification>).


b) Если i-ое <вставляемое значение> (<insert value>) из <списка вставляемых значений> (<insert value list>) является неопределенным значением, то значение столбца возможной строки, соответствующего i-ому объектному столбцу, является неопределенным значением.

Если указывается <спецификация запроса> (<query specification>), то пусть R обозначает результат этой <спецификации запроса> (<query specification>). Если R пуст, то параметру SQLCODE присваивается значение 100, и никакая строка не вставляется. Число созданных возможных строк равно мощности R. Вставляемые значения одной возможной строки являются значениями одной строки R, и значения в одной строке R являются вставляемыми значениями одной возможной строки.



Общие правила


Курсор CR должен быть в закрытом состоянии.

Пусть S обозначает <спецификацию курсора> (<cursor specification> курсора CR.

Курсор CR переводится в открытое состояние следующими шагами:


а) Фактически создается копия S, в которой каждая <спецификация цели> (<target specification>) заменяется на значение идентифицируемой цели.


b) Если S специфицирует только читаемую таблицу, то эта таблица фактически создается в соответствии со спецификацией - копией S.


c) Курсор CR переводится в открытое состояние и его позиция устанавливается перед первой строкой таблицы.



Общие правила


Любые изменения базы данных, совершенные в текущей транзакции, аннулируются.

Любой курсор, открывавшийся в текущей транзакции, закрывается.

Текущая транзакция завершается.



Общие правила


Пусть R обозначает результат <спецификации запроса> (<query specification>) S.

Мощность R не должна быть больше единицы. Если R пуст, то параметру SQLCODE присваивается значение 100 и и значения не присваиваются целям, идентифицированным в <списке целей выбора> (<select target list>).

Если R не пуст, то значения строки R присваиваются соответствующим целям.

Присваивание значений целям из <списка целей выборки> (<select target list>), кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним.

Если в процессе присваивания значений целям фиксируется ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации.

Цель, идентифицированная i-той <спецификацией цели> (<target specification>) из <списка целей выборки> (<select target list>), соответствует i-ому значению в строке R.

Пусть V обозначает идентифицированную цель, а v соответствующее значение в строке R.

Если v является неопределенным значением, то для V должен быть специфицирован индикатор, и этот индикатор устанавливается в -1. Если v - не неопределенное значение, и V имеет индикатор, то:


а) Если тип данных V есть тип символьных строк длины L и длина M v больше L, то индикатор получает значение M.


b) В противном случае значение индикатора устанавливается в 0.


a) Если тип данных V есть тип символьных строк, и длина v равна длине V, то значением V становится v.


b) Если тип данных V есть тип символьных строк длины L, и длина v больше L, то значением V становятся первые L символов v.


c) Если тип данных V есть тип символьных строк длины L, и длина M v меньше L, то значением первых M символов V становится v, и в последние L-M символов V устанавливается символ пробела.


d) Если тип данных V есть тип точных чисел, то должно существовать представление значения v в типе данных V такое, чтобы не потерялись никакие первые значащие цифры, и значением V становится это представление.


e) Если тип данных V есть тип приблизительных чисел, то значением V становится приблизительное значение v.



Общие правила


Курсор CR должен быть установлен на строку.

Объектная строка является такой строкой, из которой порождена текущая строка CR.

Объектная строка модифицируется согласно спецификации каждого <раздела установки: позиционной> (<set clause: positioned>). <Раздел установки: позиционной> (<set clause: positioned>) специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный <объектным столбцом: позиционным> (<object column: positioned>) в <разделе установки: позиционной> (<set clause: positioned>). Значение модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (<value expression>). Если <выражение, вырабатывающее значение> (<value expression>) содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки.

Объектная строка модифицируется по следующим шагам:


а) Создается возможная строка, которая является копией объектной строки.


b) Для каждого <раздела установки: позиционной> (<set clause: positioned>) значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации.


c) Объектная строка заменяется на возможную строку.

Если Т- это представляемая таблица, определенная через <определение представления> (<view definition>) с "WITH CHECK OPTION", то если <спецификация запроса> (<query specification>), содержащееся в <определении представления> (<view definition>), включает <раздел where> (<where clause>), не содержащийся в <подзапросе> (<subquery>), то <условие поиска> (<search condition>) этого <раздела where> (<where clause>) должно быть true для возможной строки.

Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное значение модификации С.


a) Если тип данных C есть тип символьных строк, и длина v равна длине C, то значением C становится v.


b) Если тип данных C есть тип символьных строк длины L, и длина M v меньше L, то значением первых M символов C становится v, и в последние L-M символов C устанавливается символ пробела.


c) Если тип данных C есть тип точных чисел, то должно существовать представление значения v в типе данных C такое, чтобы не потерялись никакие первые значащие цифры, и значением C становится это представление.


d) Если тип данных C есть тип приблизительных чисел, то значением C становится приблизительное значение v.



Общие правила



а) Если не специфицировано <условие поиска> (<search condition>), то все строки Т являются объектными строками.


b) Если условие поиска специфицировано, то это условие применяется к каждой строке Т с <именем таблицы> (<table name>), связанным с этой строкой, и объектными строками являются все строки, для которых результат <условия поиска> (<search condition>) есть true. Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически выполняется для каждой строки T, и результат используется при применении <условия поиска> (<search condition>) к данной строке Т. Если какой-либо выполняемый <подзапрос> (<subquery>) содержит внешнюю ссылку на столец Т, то она указывает на значение этого столбца в данной строке Т.


Замечание: "Внешняя ссылка" определяется в , "<column specification">.

Каждая объектная строка модифицируется согласно спецификации каждого <раздела установки: поисковой> (<set clause: searched>). <Раздел установки: поисковой> (<set clause: searched>) специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный <объектным столбцом: поисковым> (<object column: searched>). Значение модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (<value expression>). Если <выражение, вырабатывающее значение> (<value expression>) содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки.

Объектная строка модифицируется по следующим шагам:


а) Создается возможная строка, которая является копией объектной строки.


b) Для каждого <раздела установки: поисковой> (<set clause: searched>) значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации.



Синтаксические правила


Применимые <привилегии> (<privileges>) к <имени таблицы> (<table name>) должны включать INSERT.


Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".

Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) <спецификации запроса> (<query specification>) или какого-либо <подзапроса> (<subquery>), содержащегося в <спецификации запроса> (<query specification>).

Каждое <имя столбца> (<column name>) в <списке столбцов вставки> (<insert column list>) должно идентифицировать столбец Т, и один и тот же столбец не должен быть идентифицирован более одного раза. Отсутствие <списка столбцов вставки> (<insert column list>) является неявной спецификацией <списка столбцов вставки> (<insert column list>), который идентифицирует все столбцы Т в порядке возрастания их порядковых позиций внутри Т.

Столбец, идентифицированный в <списке столбцов вставки> (<insert column list>), является объектным столбцом.


а) Если указывается <список вставляемых значений> (<insert value list>), то число <вставляемых значений> (<insert value>) в этом <списке вставляемых значений> (<insert value list>) должно быть равно числу <имен столбцов> (<column name>) в <списке вставляемых столбцов> (<insert column list>). Пусть i-ый элемент <оператора вставки> (<insert statement>) указывает на i-ую <спецификацию значения> (<value specification>) в этом <списке вставляемых значений> (<insert value list>).


b) Если указывается <спецификация запроса> (<query specification>), то степень таблицы, специфицированной этой <спецификацией запроса> (<query specification>), должна быть равна числу <имен столбцов> (<column name>) в <списке вставляемых столбцов> (<insert column list>). Пусть i-ый элемент <оператора вставки> (<insert statement>) указывает на i-ый столбец таблицы, специфицированной <спецификацией запроса> (<query specification>).



Синтаксические правила


Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе открытия> (<open statement>).



Синтаксические правила


Применимые <привилегии> (<privileges>) для каждого <имени таблицы> (<table name>) должны включать SELECT.


Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".

<Выражение, <вырабатывающее таблицу> (<table expression>) не должно включать <раздел group by> (<group by clause>) или <раздел having> <having clause> и не должно идентифицировать сгруппированное представление.

Число элементов в <списке выборки> (<select list>) должно быть таким же, как число элементов в <списке целей выборки> (<select target list>).


а) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) в <списке целей выборки> (<select target list>), является типом символьных строк, то тип данных i-ого <выражения, вырабатывающего значение> (<value expression>) в <списке выборки> (<select list>) должен быть типом символьных строк.


b) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) в <списке целей выборки> (<select target list>), является типом целых чисел, то тип данных i-ого <выражения, вырабатывающего значение> (<value expression>) в <списке выборки> (<select list>) должен быть типом точных чисел.


c) Если тип данных цели, указанной i-ой <спецификацией цели> (<target specification>) в <списке целей выборки> (<select target list>), является типом приблизительных чисел, то тип данных i-ого <выражения, вырабатывающего значение> (<value expression>) <списке выборки> (<select list>) должен быть типом приблизительных чисел.

Пусть S обозначает <спецификацию запроса> (<query specification>) с теми же <списком выборки> (<select list>) и <выражением, вырабатывающим таблицу> (<table expression>), какие указаны в <операторе выборки> (<select statement>), и содержащий ALL или DISTINCT, если они присутствуют в <операторе выборки> (<select statement>). S должна быть допустимой <спецификацией запроса> (<query specification>).



Синтаксические правила


"Применимые <привилегии> (<privileges>)" к <имени таблицы> (<table name>) должны включать привилегию UPDATE для каждого <объектного столбца: позиционного> (<object column: positioned>).


Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".

Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе модификации: позиционном> (<update statement: positioned>).

Таблица, на которую указывает CR, не должна быть только читаемой.

Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т должна быть таблицей, идентифицированной в первом <разделе from> (<from clause>) <спецификации курсора> (<cursor specification>) CR.

<Выражение, вырабатывающее значение> (<value expression>) в <разделе установки: позиционной> (<set clause: positioned>) не должно включать <спецификацию функции над множеством> (<set function specification>).

Каждое <имя столбца> (<column name>), специфицированное как <объектный столбец: позиционный> (<object column: positioned>), должно идентифицировать столбец T. Один <объектный столбец: позиционный> (<object column: positioned>) не должен появляться более одного раза в <операторе модификации: позиционном> (<update statement: positioned>).

Область действия <имени таблицы> (<table name>) - целиком весь оператор <модификации: позиционный> (<update statement: positioned>).

Для каждого <раздела установки: позиционного> (<set clause: positioned>):


а) Если специфицировано неопределенное значение, то для столбца, указанного <объектным столбцом: позиционным> (<object column: positioned>), должно до пускаться неопределенное значение.



Синтаксические правила


"Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) должны включать UPDATE для каждого <имени столбца: поискового> (<object column: searched>).


Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в , "<определение привилегий> (<privileges definition>)".

Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) любого <подзапроса> (<subquery>), содержащегося в <условии поиска> (<search condition>).

<Выражение, вырабатывающее значение> (<value expression>) в <разделе установки: поисковой> (<set clause: searched>) не должно включать <спецификацию функции над множеством> (<set function specification>).

Каждое <имя столбца> (<column name>), специфицированное как <объектный столбец: поисковый> (<object column: searched>), должно идентифицировать столбец T. Один <объектный столбец: поисковый> (<object column: searched>) не должен появляться более одного раза в <операторе модификации: поисковом> (<update statement: searched>).

Область действия <имени таблицы> (<table name>) - целиком <оператор модификации: поисковый> (<update statement: searched>.

Для каждого <раздела установки: поискового> (<set clause: searched>):


а) Если специфицировано неопределенное значение, то для столбца, указанного <объектным столбцом: поисковым> (<object column: searched>), должно допускаться неопределенное значение.


b) Если тип данных столбца, указанного <объектным столбцом: поисковым> (<object column: searched>), является типом символьных строк длины L, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом символьных строк с длиной меньшей или равной L.


c) Если тип данных столбца, указанного <объектным столбцом: поисковым> (<object column: searched>), является типом точных чисел, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом точных чисел.


d) Если тип данных столбца, указанного <объектным столбцом: поисковым> (<object column: searched>), является типом приблизительных чисел, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом приблизительных чисел или типом точных чисел.



Уровни


Этот стандарт специфицирует два уровня и отдельные средства поддержания целостности данных.

Средства поддержания целостности данных образуют следующие синтаксические конструкции вместе с Синтаксическими правилами и Общими правилами:

<Раздел умолчаний> (<default clause>)

все опции <ограничения на столбец> (<column constraint>), отличные от NOT NULL и NOT NULL UNIQUE

все опции <определения ограничения на таблицу> (<table constraint definition>), кроме опции UNIQUE <список столбцов уникальности> (UNIQUE (<unique column list>)).

<действие> REFERENCES <список столбцов передачи> (<action> REFERENCES [ (<grant column list>)])

Уровень 2 - это полный язык базы данных SQL, не включающий средства улучшения целостности данных. Уровень 1 - это подмножество уровня 2, которое подчиняется следующим дополнительным правилам.

, "Транзакции":


а) Первое предложение параграфа 1 заменяется следующим:
Транзакция - это последовательность операций, включающая операции над базой данных, которые являются атомарными по отношению к восстановлению.


b) Параграф 2 удаляется.


c) Второе предложение параграфа 3 удаляется.

, "Лексемы (<token>):


<Идентификатор> (<identifier>) не должен состоять более чем из 12 символов.

, "Имена":


<Имя таблицы> (<table name>) не должно содержать <идентификатор полномочий> (<authorization identifier>).

, "<Спецификация значения> (<value specification>) и <спецификация цели> (<target specification>)":


а) <Спецификация значения> (<value specification>) не должна содержать USER.


b) <Спецификация параметра> (<parameter specification>) не должна специфицировать <парамететр-индикатор> (<indicator parameter>).


c) <Спецификация переменной> (<variable specification>) не должна специфицировать <переменную-индикатор> (<indicator variable>).


, "<Спецификация столбца> (<column specification>)" :

К синтаксическому правилу 4 добавляется следующее:

<Спецификация столбца> (<column specification>) не должна быть внешней ссылкой.



, "<Спецификация функции над множеством> (<set function specification>)" , <Подзапрос> (<subquery>), и , <Cпецификация запроса> (<query specification>):

<Функция надо всеми элементами множества> (<all set function>), <подзапрос> (<subquery>) и <спецификация запроса (<query specification>) не должны содержать ALL.

Замечание: на уровне 1 сохранение дубликатов специфицируется отсутствием DISTINCT.

, "<Спецификация функций над множеством> (<set function specification>)":

<Функция над различными элементами множества> (<distinct set function>) не должны включать AVG, MAX, MIN или SUM.



, "<Предикат сравнения> (<comaprison predicate>)" : <Оператор сравнения> (<comp op>) не должен включать "<>". Замечание: на уровне 1 сравнение в форме "A <> B" выражается через эквивалент "NOT A=B".

, "<предикат like> (<like predicate>):

а) <Предикат like> (<like predicate>) не должен специфицировать ESCAPE <символ escape> (<escape character>).

b) <Предикат like> (<like predicate>) не должен специфицировать NOT.

Замечание: на уровне 1 <предикат like> (<like predicate>), содержащий NOT, может быть выражен в эквивалентной форме <условия поиска> (<search condition>): "NOT <like predicate>".

, "<предикат exists> (<exists predicate>)":

<Предикат> (<predicate>) не должен специфицировать <предикат exists> (<exists predicate>).



, "<раздел group by>" (<group by clause>)":

Следующее предложение добавляется к Общему правилу 2:



Группирование строк, в которых значения одного или нескольких столбцов группировки являются неопределенными, определяется в реализации.



, "<Спецификация запроса> (<query specification>)":

Синтаксическое правило 11 заменяется на следующее:

Распознавание того, является ли <спецификация запроса> (<query specification>) изменяемой или только читаемой, определяется в реализации.



, "<Схема> (<schema>)":

<Схема> (<schema>) не должна специфицироваться.

Уровень 1 реализации должен обеспечивать некоторый механизм связи <идентификатора полномочий> (<authorization identifier>) с <определением таблицы> (<table definition>), <определением представления> (<view definition>) или <определением привилегий> (<privileges definition>).

, "<Определение таблицы> (<table definition>)":

<Определение таблицы> (<table definition>) не должно содержать <определение огpаничения уникальности> (<unique constraint definition>). Уровень реализации 1 должен обеспечивать некоторый механизм спецификации ограничения таблицы, связанного с уникальностью.

, "<Определение столбцов> (<column definition>):

а) <Тип данных> (<data type>) в <определении столбца> (<column definition>) не должен включать REAL, DOUBLE, PRECISION и NUMERIC.

b) <Определение столбца> (<column definition>) столбца не должно специфицировать NOT NULL.

c) <Определение столбца> (<column definition>) столбца не должно специфицировать UNIQUE.

, "<Определение представления> (<view definition>):

<Определение представления> (<view definition>) не должно содержать WITH CHECK OPTION.

, "<Определение привилегий> (<privilege definition>)" :

<Определение привилегий> (<privileges definition>) не должно содержать WITH GRANT OPTION.

, "<Процедура> (<procedure>):




а) Cинтаксическое правило 8 (a) (2) заменяется на следующее:

Любой <тип данных> (<data type>) в <объявлении параметра> (<parameter declaration>) должен специфицировать тип CHARACTER.

b) В общем правиле 3 случай (a) каждое вхождение числа "100" заменяется на слова " положительное число со значением, определяемым реализацией"

c) Общее правило 3 (b) (1) заменяется на следующее:

В реализации определяется, аннулируются ли при выполнении S изменения, произведенные в базе данных.

, "<Объявление курсора> (<declare cursor>)":

а) <Спецификация сортировки> (<sort specification>) не должна содержать <целых без знака> (<unsigned integer>).

b) <Спецификация сортировки> (<sort specification>) не должна содержать ASC.

Замечание: на уровне 1 порядок по возрастанию специфицируется отсутствием опции DESC.

c) <Выражение запроса> (<query expression>) не должно содержать UNION.

Замечание: на уровне 1 функция объединения не поддерживается.

, "<Оператор вставки> (<insert statement>) :

<Оператор вставки> (<insert statement>) не должен содержать <спецификацию запроса> (<query specification>).

, "<Оператор модификации: позиционный> (<update statement: positioned>)" и <оператор удаления: поизиционный> (<delete statement: positioned>):

<Оператор SQL> (<SQL statement>) не должен специфицировать <оператор модификации: позиционный> (<update statement: positioned>) или <оператор удаления: позиционный> (<delete statement: positioned>).

| |


Формат


<embedded SQL host program> ::=

<embedded SQL COBOL program>

| <embedded SQL FORTRAN program>

| <embedded SQL Pascal program>

| <embedded SQL PL/1 program>

<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>]

<host variable definition> ::=

< COBOL variable definition>

| < FORTRAN variable definition>

| <Pascal variable definition>

| <PL/1 variable definition>

<embedded variable name> ::=

:<host identifier>

<host identifier> ::=

< COBOL host identifier>

| < FORTRAN host identifier>

| <Pascal host identifier>

| <PL/1 host identifier>



Функция


Специфицирует прикладную программу со встроенным языком

SQL.



Общие правила


Интерпретация <программы со встроенным SQL> (<embedded SQL host program>) H по определению эквивалентна интерпретации извлекаемой программы P и извлекаемого <модуля> (<module>) М из программы Н.

| |



Приложения


Приложение А. <Программа со встроенным SQL> (<embedded SQL host program>)


(Это дополнение не является неотъемлемой частью стандарта.)



Синтаксические правила


<Прикладная программа со встроенным SQL> (<embedded SQL host program>) является прикладной программой, состоящей из текста на языке программирования и текста на SQL. Текст на языке программирования должен удовлетворять требованиям конкретного стандартного языка программирования. Текст на SQL должен состоять из одного или более <встроенных операторов SQL> (<embedded SQL statement>) и, возможно, одной или более <секций объявления SQL> (<embedded SQL declare section>).

<Встроенный оператор SQL> (<embedded SQL statement>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>), содержащиеся в <программе на языке COBOL со встроенным SQL> (<embedded SQL COBOL program>), должны содержать <терминатор SQL> (<SQL terminator>) END-EXEC. <Встроенный оператор SQL> (<embedded SQL statement>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>), содержащиеся в <программе на языке FORTRAN со встроенным SQL> (<embedded SQL FORTRAN program>), не должны содержать <терминатор SQL> (<SQL terminator>). <Встроенный оператор SQL> (<embedded SQL statement>), <объявление начала встроенного SQL> (<embedded SQL begin declare>) или <объявление конца встроенного SQL> (<embedded SQL end declare>), содержащиеся в <программе на языке PL/1 со встроенным SQL> (<embedded SQL PL/1 program>), должны содержать <терминатор SQL> (<SQL terminator>) - точку с запятой. В <программе на языке PASCAL со встроенным SQL> (<embedded SQL PASCAL program>) <объявление начала встроенного SQL> (<embedded SQL begin declare>) должно содержать <терминатор SQL> (<SQL terminator>) - точку с запятой; <объявление конца встроенного SQL> (<embedded SQL end declare>) или <встроенный оператор SQL> (<embedded SQL statement>), непосредственно следующие за <<объявлением начала встроенного SQL> (<embedded SQL begin declare>) или <встроенным оператором SQL> (<embedded SQL statement>), должны содержать <терминатор SQL> - точку с запятой; в остальных случаях <объявление конца встроенного SQL> (<embedded SQL end declare>) или <встроенный оператор SQL> (<embedded SQL statement>) не должны содержать <терминатор SQL>, а должны заканчиваться в соответствии с правилами для операторов языка Pascal.