Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
30
Добавлен:
02.05.2014
Размер:
21.42 Кб
Скачать

Язык манипулирования данными A.noneline { font-family: Arial, Serif; text-decoration: none; } FONT.arial { font-family: Arial, Serif; } TD.arial { font-family: Arial, Serif; } TH.arial { font-family: Arial, Serif; } PRE { font-family: Monospace; color: navy; } SAMP { font-family: Monospace; color: navy; } TT { font-family: Monospace; color: navy; } VAR { font-family: Monospace; color: navy; }

Сервер поддерживается

Центром Информационных Технологий

(095) 932-9212, 932-9213, 939-0783

E-mail: info@citforum.ru Сервер Информационных Технологий содержит море(!) аналитической информации 8. Язык манипулирования данными (data manipulation language) 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. Назад | Содержание | Вперед

Comments: info@citmgu.ru

Copyright © CIT

Соседние файлы в папке INF-5