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.
Назад | Содержание | Вперед