<Имя курсора> (<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>) должна
идентифицировать столбец
таблицы Т.
a) Если <спецификация
сортировки> (<sort specification>)
содержит <спецификацию
столбцов> (<column specification>), то
<спецификация сортировки>
(<sort specification>) идентифицирует
столбец Т с именем, указанным в
этой <спецификации столбца>
(<column specification>).
b) Если <спецификация
сортировки> (<sort specification>)
содержит <целое без знака>
(<unsigned integer>), то это целое
должно быть больше нуля и не
более степени таблицы T.
<Спецификация сортировки>
(<sort specification>) указывает
столбец Т с порядковой (ordinal)
позицией, специфицируемой этим
<целым без знака> (<unsigned
integer>).
Общие правила
a) Если Т изменяемая (updatable)
таблица, то курсор
ассоциируется с именованной
таблицей, идентифицируемой
<именем таблицы> (<table name>)
из <раздела from> (<from clause>).
Пусть В обозначает эту
именованную таблицу. Для
каждой строки в Т существует
соответствующая строка в В, из
которой получена строка
таблицы Т. Когда курсор
установлен на строку таблицы Т,
курсор также установлен на
соответствующую строку
таблицы В.
b) В противном случае курсор не
ассоциируется с именованной
таблицей.
a) Если не указано UNION, то Т - это
результат указанной
<спецификации запроса>
(<query specification>.
b) Если UNION указано, то пусть для
каждого указанного UNION Т1 и Т2
обозначают результаты
<выражения запроса> (<query
expression>) и <терма запроса>
(<query term>). Результат UNION
фактически порождается
следующим образом: i)
Инициализировать результат
как пустую таблицу.
ii) Занести в результат
каждую строку Т1 и каждую
строку Т2
iii) Если не указано ALL , то
удалить все излишние
дубликаты строк из
результата.
a) Если не указано ORDER BY, то:
i) Порядок строк в Т
определяется реализацией.
ii) Порядок строк может
может быть разным в разных
транзакциях.
iii) Порядок строк Т,
устанавливаемый при
открытии курсора, будет
таким же при следующем
открытии курсора в этой же
транзакции при условии,
что:
Отсутствуют сторонние
изменения каких-либо
таблиц, указанным в
спецификации курсора.
Упорядоченный набор
значений параметров,
передаваемых в
<процедуру>
(<procedure>), содержащую
<оператор открытия>
(<open statement>),
является одинаковым в
обоих случаях.
Если эти условия не
удовлетворяются, то
упорядочение строк в Т
может различаться при
последовательных
открытиях курсора в
одной транзакции.
b) Если ORDER BY указано, то Т
обладает порядком сортировки:
i) Порядок сортировки
является
последовательностью групп
сортировки. Группа
сортировки - это
последовательность строк,
в которых все значения
столбцов сортировки
идентичны. Более того,
группа сортировки может
быть последовательностью
групп сортировки.
ii) Мощность
последовательности и
порядковая позиция каждой
группы сортировки
определяется значениями
наиболее значащих
столбцов сортировки.
Мощность
последовательности
является минимальным
числом групп сортировки
таких, что для каждой
группы сортировки с числом
строк больше единицы все
значения столбца
сортировки идентичны.
iii) Если порядок сортировки
основывается на
дополнительных столбцах
сортировки, то каждая
группа сортировки с числом
строк больше единицы
является
последовательностью групп
сортировки. Мощность
каждой последовательности
и порядковая позиция
каждой группы сортировки
внутри каждой
последовательности
определяется значениями
следующего наиболее
значащего столбца
сортировки. Мощность
каждой последовательности
является минимальным
числом групп сортировки
таких, что для каждой
группы с числом строк
больше единицы все
значения этого столбца
сортировки идентичны.
iv) Предыдущий параграф
применяется по очереди к
каждому дополнительному
столбцу сортировки. Если
группа сортировки состоит
из нескольких строк и не
является
последовательностью групп
сортировки, то порядок
строк в группе сортировки
не определен.
v) Пусть С обозначает
столбец сортировки и S -
последовательность,
которая определяется
значениями С.
vi) Направление сортировки
связывается с каждым
столбцом сортировки. Если
направление для С задано
по возрастанию, то первая
группа сортировки S
содержит наименьшее
значение С и каждая
последующая группа
сортировки содержит
значение С большее, чем
значение С в
предшествующей группе
сортировки. Если
направление для С задано
по убыванию, то первая
группа сортировки S
содержит наибольшее
значение С и каждая
последующая группа
сортировки содержит
значения С меньшее, чем
значение С в
предшествующей группе
сортировки.
vii) Упорядоченность
определяется правилами
сравнения, указанными в 5.11,
"<Предикат
сравнения"> (<comparison
predicate>). Порядок
неопределенных значений
по отношению к не
неопределенным значениям
определяется реализацией,
но должен быть либо строго
больше либо строго меньше
всех не неопределенных
значений.
viii) <Спецификация
сортировки> (<sort
specification>) специфицирует
столбец сортировки и
направление. Столбец
сортировки - это столбец,
указываемый <целым без
знака> (<unsigned integer>) или
<спецификацией столбца>
(<column specification>). <Целое
без знака> (<unsigned integer>)
i ссылается на i-ый столбец
Т. <Спецификация
столбца> (<column specification>)
указывает именованный
столбец.
ix) Если в <спецификации
сортировки> (<sort
specification>) указано DESC, то
направление сортировки,
специфицируемое этой
<спецификацией
сортировки> (<sort
specification>), является
направлением по убыванию.
Если указано АSC или не
указано ни ASC, ни DESC, то
направление сортировки
для этого столбца
сортировки является
направлением по
возрастанию.
x) Последовательность
<спецификаций
сортировки> (<sort
specification>) определяет
относительную значимость
сортируемых столбцов.
Столбец сортировки,
указанный в первой
<спецификации
сортировки> (<sort
specification>), наиболее
значащий и каждый
последующий столбец
сортировки является менее
значащим, чем предыдущий
столбец сортировки.
<delete statement: positioned> ::=
DELETE FROM <table name>
WHERE CURRENT OF <cursor name>
Синтаксические правила
Применимые <привилегии>
(<privileges>) для <имени
таблицы> (<table name>) должны
включать DELETE. Замечание: "Применимые
<привилегии> (<privileges>)"
для <имени таблицы> (<table
name>) определяются в 6.10,
"<Определение привилегий>
(<privileges definition>).
Содержащий <модуль>
(<module>) должен содержать
<объявление курсора> (<declare
cursor>) CR с тем же <именем
курсора> (<cursor name>), что и
<имя курсора> (<cursor name>) в
<операторе удаления:
позиционном> (<delete statement:
positioned>).
Таблица, на которую указывает
CR, не должна быть только
читаемой.
Пусть Т обозначает таблицу,
идентифицируемую <именем
таблицы> (<table name>). Т должна
быть таблицей,
идентифицируемой в первом
<разделе from> (<from clause>) в
<спецификации курсора>
(<cursor specification>) CR.
Общие правила
Курсор CR должен быть
установлен на строку.
Строка, из которой получена
текущая строка CR, удаляется.
<delete statement: searched> ::=
DELETE FROM <table name>
WHERE [<search condition>]
Синтаксические правила
Применимые <привилегии>
(<privileges>) для <имени
таблицы> (<table name>) должны
включать DELETE. Замечание: Применимые
<привилегии> (<privileges>) для
<имени таблицы> (<table name>)
определяются в 6.10,
"<определение привилегий>
(<privileges definition>)".
Пусть Т обозначает таблицу,
идентифицируемую <именем
таблицы> (<table name>). Т не
должна быть только читаемой
таблицей или таблицей, которая
идентифицируется в <разделе
from> (<from clause>) любого
<подзапроса> (<subquery>),
содержащегося в <условии
поиска> (<search condition>).
Область действия <имени
таблицы> (<table name>) - целиком
<оператор удаления:
поисковый> (<delete statement:
searched>.
Общие правила
а) Если не указано <условие
поиска> (<search condition>), то
удаляются все строки таблицы Т.
б) Если указано <условие
поиска> (<search condition>), то
условие применяется к каждой
строке Т с <именем таблицы>
(<table name>), связанным с этой
строкой, и все строки, для
которых результат <условия
поиска> (<search condition>) есть
true, удаляются. Каждый
<подзапрос> (<subquery>) в
<условии поиска> (<search
condition>) реально выполняется
для каждой строки T и
результаты используются в
применении <условия поиска>
(<search condition>) к данной строке
Т. Если любой выполняемый
<подзапрос> (<subquery>)
содержит внешнюю ссылку на
столбец Т, то эта ссылка
указывает на значение этого
столбца в данной строке Т. Замечание: "Внешняя
ссылка" определяется в 5.7,
"<спецификация столбца>
(<column specification>)".
8.6. <Оператор чтения> (<fetch
statement>)
Функция
Устанавливает курсор на
следующую строку таблицы и
выбирает значения из этой строки.
Содержащий <модуль>
(<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-ого столбца таблицы Т
должен быть типом
приблизительных чисел или
типом точных чисел.
Общие правила
Курсор 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.
Знаете ли Вы, как разрешается парадокс Ольберса? (Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды. Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.