8.1 <Оператор закрытия> (<close
statement>)
Функция
Закрыть курсор.
Формат
<close statement>::=
CLOSE <cursor name>
Синтаксические правила
- Объемлющий модуль должен
содержать объявление курсора,
в котором используется это же
имя курсора.
Общие правила
- Курсор должен быть в открытом
состоянии.
- Курсор переводится в закрытое
состояние и разрушается копия
<спецификации курсора>
(<cursor soecificaton>).
8.2. <Оператор фиксации> (<commit
statement>)
Функция
Заканчивает текущую транзакцию с
фиксацией.
Формат
<commit statement>::=
COMMIT WORK
Синтаксические правила
Нет.
Общие правила
- Текущая транзакция
завершается.
- Закрываются любые курсоры,
открытые данной транзакцией.
- Любые изменения базы данных,
сделанные в текущей
транзакции, фиксируются.
8.3. <Объявление курсора> (<declare
cursor>)
Функция
Определяет курсор.
Формат
<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]
Синтаксические правила
- <Имя курсора> (<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>), наиболее
значащий и каждый
последующий столбец
сортировки является менее
значащим, чем предыдущий
столбец сортировки.
8.4. <Оператор удаления:
позиционный> (<delete statement: positioned>)
Функция
Удаляет строку таблицы.
Формат
<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, удаляется.
8.5. <Оператор удаления:
поисковый> (<delete statement: searched>)
Функция
Удаляет строки таблицы.
Формат
<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>)
Функция
Устанавливает курсор на
следующую строку таблицы и
выбирает значения из этой строки.
Формат
<fetch statement> ::=
FETCH <cursor name> INTO <fetch target list>
<fetch target list> ::=
<target specification>[{,<target specification>}...]
Синтаксические правила
- Содержащий <модуль>
(<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.
|