Применимые <привилегии>
(<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>)
Функция
Выбирает значения из
специфицированной строки таблицы.
Применимые <привилегии>
(<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.
<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.
"Применимые <привилегии>
(<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.
Знаете ли Вы, как разрешается парадокс Ольберса? (Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды. Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.