8.7 <Оператор вставки> (<insert statement>)
Функция
Создает новые строки в таблице
Формат
<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
Синтаксические правила
- Применимые <привилегии> (<privileges>) к <имени таблицы> (<table name>) должны включать INSERT.
Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<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>).
- Если i-ый элемент <оператора вставки> (<insert statement>) не является неопределенным <значением вставки> (<insert statement>), то:
а) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (<column name>), является типом символьных строк длины L, то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом символьных строк с длиной меньшей или равной L.
b) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (<column name>), является типом точных чисел, то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом точных чисел.
c) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (<column name>), является типом приблизительных чисел, то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом приблизительных чисел или типом точных чисел.
Общие правила
- Строка вставляется по следующим шагам:
а) Фактически создается возможная строка, как это указано в Общих правилах 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 являются вставляемыми значениями одной возможной строки.
- Пусть V обозначает строку R или последовательность значений специфицированных <списком вставляемых значений> (insert value list>). Тогда i-ое значение V является вставляемым значением объектного столбца, идентифицируемого i-ым <именем столбца> (<column name>) в <списке вставляемых столбцов> (<insert column list>).
- Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное вставляемое значение С.
-
а) Если тип данных С есть тип символьных строк и длина v равна длине С, то значение С устанавливается в v.
b) Если тип данных С есть тип символьных строк и длина M v меньше L, то первые M символов C устанавливаются в v, и в последние L-M символы C заносится символ пробела.
c) Если тип данных С есть тип точных чисел, то должно существовать представление значения v в типе данных С такое, чтобы не потерялись никакие первые значащие цифры, и это представление становится значением С.
d) Если тип данных С есть тип приблизительных чисел, то значением С становится приблизительное значение v.
8.8. <Оператор открытия> (<open statement>)
Функция
Открывает курсор
Формат
<open statement> ::=
OPEN <cursor name>
Синтаксические правила
- Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе открытия> (<open statement>).
Общие правила
- Курсор CR должен быть в закрытом состоянии.
- Пусть S обозначает <спецификацию курсора> (<cursor specification> курсора CR.
- Курсор CR переводится в открытое состояние следующими шагами:
а) Фактически создается копия S, в которой каждая <спецификация цели> (<target specification>) заменяется на значение идентифицируемой цели.
b) Если S специфицирует только читаемую таблицу, то эта таблица фактически создается в соответствии со спецификацией - копией S.
c) Курсор CR переводится в открытое состояние и его позиция устанавливается перед первой строкой таблицы.
8.9. <Оператор отката> (<rollback statement>)
Функция
Завершает текущую транзакцию с откатом.
Формат
<rollback statement> ::=
ROLLBACK WORK
Синтаксические правила
Нет.
Общие правила
- Любые изменения базы данных, совершенные в текущей транзакции, аннулируются.
- Любой курсор, открывавшийся в текущей транзакции, закрывается.
- Текущая транзакция завершается.
8.10. <Оператор выборки> (<select statement>)
Функция
Выбирает значения из специфицированной строки таблицы.
Формат
<select statement> ::=
SELECT [ALL | DISTINCT] <select name>
INTO <select target list>
<table expression>
<select target list>::=
<target specification> [{,<target specification>}...]
Синтаксические правила
- Применимые <привилегии> (<privileges>) для каждого <имени таблицы> (<table name>) должны включать SELECT.
Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<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>).
Общие правила
- Пусть 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.
8.11. <Оператор модификации: позиционный> (<update statement: positioned>)
Функция
Модифицирует строку таблицы.
Формат
<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>
Синтаксические правила
- "Применимые <привилегии> (<privileges>)" к <имени таблицы> (<table name>) должны включать привилегию UPDATE для каждого <объектного столбца: позиционного> (<object column: positioned>).
Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<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>), должно до пускаться неопределенное значение.
b) Если тип данных столбца, указанного <объектным столбцом: позиционным> (<object column: positioned>), является типом символьных строк длины L, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом символьных строк с длиной, меньшей или равной L.
c) Если тип данных столбца, указанного <объектным столбцом: позиционным> (<object column: positioned>), является типом точных чисел, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом точных чисел.
d) Если тип данных столбца, указанного <объектным столбцом: позиционным> (<object column: positioned>), является типом приблизительных чисел, то тип данных <выражения, вырабатывающего значение> (<value expression>) должен быть типом приблизительных чисел или типом точных чисел.
Общие правила
- Курсор 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.
8.12 <Оператор модификации: поисковый> (<update statement: searched>)
Функция
Модифицирует строки таблицы.
Формат
<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>
Синтаксические правила
- "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) должны включать UPDATE для каждого <имени столбца: поискового> (<object column: searched>).
Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<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>) должен быть типом приблизительных чисел или типом точных чисел.
Общие правила
-
а) Если не специфицировано <условие поиска> (<search condition>), то все строки Т являются объектными строками.
b) Если условие поиска специфицировано, то это условие применяется к каждой строке Т с <именем таблицы> (<table name>), связанным с этой строкой, и объектными строками являются все строки, для которых результат <условия поиска> (<search condition>) есть true. Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически выполняется для каждой строки T, и результат используется при применении <условия поиска> (<search condition>) к данной строке Т. Если какой-либо выполняемый <подзапрос> (<subquery>) содержит внешнюю ссылку на столец Т, то она указывает на значение этого столбца в данной строке Т.
Замечание: "Внешняя ссылка" определяется в 5.7, "<column specification">.
- Каждая объектная строка модифицируется согласно спецификации каждого <раздела установки: поисковой> (<set clause: searched>). <Раздел установки: поисковой> (<set clause: searched>) специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный <объектным столбцом: поисковым> (<object column: searched>). Значение модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (<value expression>). Если <выражение, вырабатывающее значение> (<value expression>) содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки.
- Объектная строка модифицируется по следующим шагам:
а) Создается возможная строка, которая является копией объектной строки.
b) Для каждого <раздела установки: поисковой> (<set clause: searched>) значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации.
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.
Назад | Содержание | Вперед