Язык модулей SQL 7. 1 () Функция Определяет модуль. Формат : := [.... ] .... : := LANGUAGE { COBOL | FORTRAN | PASCAL | PLI } : := AUTHORIZATION : := Синтаксические правила
Для каждого () в () должна существовать ровно одна (
) в этом (), которая содержит () со спецификацией (), объявленного в (). () должен быть ассоциирован с прикладной программой при ее выполнения. Прикладная программа должна быть ассоциирована не более чем с одним (). Общие правила
Если () () специфицирует COBOL (соответственно FORTRAN, PASCAL, PLI) и если агент, выполняющий вызов (
) этого (), не является стандартной программой на языке COBOL (соответственно FORTRAN, Pascal, PL/1), то результат неопределен. После выполнения агентом на языке программирования последнего вызова (
) в () неявно выполняется () или (). Выбор одного из этих () определяется реализацией. Если имеет место невосстанавлваемая ошибка, то СУБД должна выполнить (). 7. 2. () Функция Задает имя (). Формат : := MODULE [] Синтаксические правила
() должно отличаться от () любого другого () в том же окружении. Понятие окружения определяется в реализации. Общие правила
() определяет необязательный () как (), определяющее содержащий () в данном окружении. 7. 3. (
) Функция Определяет процедуру и оператор языка SQL. Формат
: := PROCEDURE
.... ; ;
: :=
| : := SQLCODE : := | | | | | | | | | | Синтаксические правила
(
) должно отличаться от (
) любой другой (
) в содержащем модуле.
в каждом (
) в (
) должно отличаться от (
) любого другого (
) в этой процедуры. Любое (
), содержащееся в () (
), должно быть специфицировано в (
) этой процедуры. Если () в () совпадает с (
) в (
) (
), содержащей этот (), то (), которая содержит это (), должна содержать (). Законный вызов (
) должен поставлять n параметров, где n - число (
) в данной (
). Процедура должна содержать ровно один (). На параметр, соответствующий параметру SQLCODE, ссыля4аются я0как я4на параметр SQLCODE. () процедуры явля () содержащего ().
a) Если () специфицирует COBOL, то:
i) Типом параметра SQLCODE должен быть COMPUTATIONAL S9(PC), где PC - определяемая реализацией точность, большая или равная 4. ii) Любой () в (
) должен быть CHARACTER или NUMERIC. iii) Если i-ое (
) специфицирует () CHARACTER(L) c некоторой () L, то тип i-ого параметра должен быть буквенно-цифровым типом языка COBOL длины L. iv) Если i-ое (
) специфицирует () NUMERIC(P, S) c некоторыми (
) P и () S, то типом i-ого параметра должен быть тип языка COBOL usage DISPLAY SIGN LEADING SEPARATE со следующим PICTURE: Если S=P, то PICTURE: "S", за которым следует "V", и затем P экземпляров "9". Если P > S > 0, то PICTURE: "S", за которым следуют P-S экземпляров "9", затем "V" и затем S экземпляров "9". Если S=O, то PICTURE: "S", за которым следуют P экземпляров "9" и затем необязательное "V".
b) Если () специфицирует FORTRAN, то:
i) Тип параметра SQLCODE должен быть типом INTEGER языка FORTRAN. ii) Любой () в должен быть CHARACTER, INTEGER, REAL или DOUBLE PRECISION. iii) Если i-ое (
) специфицирует () CHARACTER(L) с некоторой () L, то тип i-ого параметра должен быть типом CHARACTER языка FORTRAN с длиной L. vi) Если i-ое (
) специфицирует () данных INTEGER, REAL или DOUBLE PRECISION, то тип i-ого параметра должен быть соответственно INTEGER, REAL или DOUBLE PRECISION языка FORTRAN.
c) Если () специфицирует PASCAL, то:
i) Тип параметра SQLCODE должен быть типом INTEGER языка Pascal. ii) Любой () в (
) должен быть CHARACTER, INTEGER, или REAL. iii) Если i-ое (
) специфицирует () CHARACTER(L) с некоторой () L, то тип i-ого параметра должен быть типом строки языка Pascal длины L. iv) Если i-ое (
) специфицирует () INTEGER или REAL, то тип i-ого параметра должен быть соответственно типом INTEGER, или REAL языка Pascal.
d) Если () специфицирует PL1, то:
i) Тип параметра SQLCODE должен быть FIXED BINARY(PP), где РР определяемая реализацией точность, большая или равная 15. ii) Любой () в (
) должен быть CHARACTER, DECIMAL, или FLOAT. iii) Если i-ое (
) специфицирует тип данных CHARACTER(L) с некоторой () L, то тип i-ого параметра должен быть типом CHARACTER языка PL/1 с длиной L. vi) Если i-ое (
) специфицирует тип данных DECIMAL(P, S) с некоторыми (
) P и () S, то тип i-ого параметра должен быть типом FIXED REAL DECIMAL(P, S) языка PL/1. v) Если i-ое (
) специфицирует тип данных FLOAT(P) с некоторой (
) P, то тип i-ого параметра должнен быть типом FLOAT REAL BINARY (P) языка PL/1. Общие правила
(
) определяет процедуру, которая может вызываться определяемым реализацией агентом. Когда процедура вызывается агентом языка программирования:
а) Если для этого агента нет активной транзакции, то транзакция фактически инициируется и связывается с этим вызовом и с последующими вызовами этим агентом любой (
) в содержащем (), до тех пор, пока данный агент не закончит эту транзакцию. b) Выполняется () S данной (
). а) Если S выполнен успешно, то
i) Если S - () , для которого следующая строка не существует, то в параметр SQLCODE устанавливается значение 100. ii) Если S - (), для которого не нашлось ни одной возможной строки, то в параметр SQLCODE устанавливается значение 100. iii) Если S - (), результатом которого явилась пустая таблица, то в параметр SQLCODE устанавливается значение 100. iv) Если S - () или ) () с поиском, для которых не нашлись объектные строки для модификации или удаления, то в параметр SQLCODE устанавливается значение 100. v) Во всех остальных случаях в параметр SQLCODE устанавливается 0. b) Если S выполнен неуспешно, то
i) Все изменения, произведенные над базой данных при выполнении S, аннулируются. ii) В параметр SQLCODE устанавливается отрицательное число со значением, определяемым реализацией Язык манипулирования данными (data manipulation language) 8. 1 () Функция Закрыть курсор. Формат : := CLOSE Синтаксические правила
Объемлющий модуль должен содержать объявление курсора, в котором используется это же имя курсора. Общие правила Курсор должен быть в открытом состоянии.
Курсор переводится в закрытое состояние и разрушается копия (). 8. 2. () Функция Заканчивает текущую транзакцию с фиксацией. Формат : := COMMIT WORK Синтаксические правила Нет. Общие правила Текущая транзакция завершается. Закрываются любые курсоры, открытые данной транзакцией.
Любые изменения базы данных, сделанные в текущей транзакции, фиксируются. 8. 3. () Функция Определяет курсор. Формат : := DECLARE CURSOR FOR : := [.... ] : := | UNION [ALL] : := | () : := ORDER BY [{, }.... ] : := { | } [ASC | DESC] Синтаксические правила
() не должно быть идентичным любому другому (), специфицируемого в каком-либо другом () того же модуля. Любое (
), содержащееся в (), должно быть определено в (
) (
) объемлющего (), который содержит (), специфицирующий это (). Замечание: Cм. Синтаксическое правило 7. 1, " ()". Пусть Т обозначает таблицу, специфицированную в ().
a) Если указано ORDER BY, то Т является только читаемой таблицей со специфицированным порядком сортировки. b) Если не указаны ни ORDER BY ни UNION и () является из меняемой (updatable), то Т - изменяемая таблица. c) Иначе Т - только читаемая таблица.
a) Если не указано UNION, то описанием Т является описание (). b) Если указано UNION, то пусть для каждого специфицированного UNION Т1 и Т2 обозначают таблицы, которые специфицированы в () и (). () в спецификациях Т1 и Т2 должен состоять из "*" или (). Кроме имен столбцов, описания Т1 и Т2 должны быть идентичными. Все столбцы результата неименованы. За исключением (), описание результата такое же, как описание Т1 и Т2. Если указано ORDER BY, то каждая () в () должна идентифицировать столбец таблицы Т. a) Если () содержит (), то () идентифицирует столбец Т с именем, указанным в этой (). b) Если () содержит (), то это целое должно быть больше нуля и не более степени таблицы T. () указывает столбец Т с порядковой (ordinal) позицией, специфицируемой этим (). Общие правила
a) Если Т изменяемая (updatable) таблица, то курсор ассоциируется с именованной таблицей, идентифицируемой () из (). Пусть В обозначает эту именованную таблицу. Для каждой строки в Т существует соответствующая строка в В, из которой получена строка таблицы Т. Когда курсор установлен на строку таблицы Т, курсор также установлен на соответствующую строку таблицы В. b) В противном случае курсор не ассоциируется с именованной таблицей.
a) Если не указано UNION, то Т - это результат указанной (. b) Если UNION указано, то пусть для каждого указанного UNION Т1 и Т2 обозначают результаты () и (). Результат UNION фактически порождается следующим образом: i) Инициализировать результат как пустую таблицу.
ii) Занести в результат каждую строку Т1 и каждую строку Т2 iii) Если не указано ALL , то удалить все излишние дубликаты строк из результата. a) Если не указано ORDER BY, то: i) Порядок строк в Т определяется реализацией.
ii) Порядок строк может может быть разным в разных транзакциях. iii) Порядок строк Т, устанавливаемый при открытии курсора, будет таким же при следующем открытии курсора в этой же транзакции при условии, что: Отсутствуют сторонние изменения каких-либо таблиц, указанным в спецификации курсора. Упорядоченный набор значений параметров, передаваемых в (
), содержащую (), является одинаковым в обоих случаях. Если эти условия не удовлетворяются, то упорядочение строк в Т может различаться при последовательных открытиях курсора в одной транзакции.
b) Если ORDER BY указано, то Т обладает порядком сортировки:
i) Порядок сортировки является последовательностью групп сортировки. Группа сортировки - это последовательность строк, в которых все значения столбцов сортировки идентичны. Более того, группа сортировки может быть последовательностью групп сортировки. ii) Мощность последовательности и порядковая позиция каждой группы сортировки определяется значениями наиболее значащих столбцов сортировки. Мощность последовательности является минимальным числом групп сортировки таких, что для каждой группы сортировки с числом строк больше единицы все значения столбца сортировки идентичны. iii) Если порядок сортировки основывается на дополнительных столбцах сортировки, то каждая группа сортировки с числом строк больше единицы является последовательностью групп сортировки. Мощность каждой последовательности и порядковая позиция каждой группы сортировки внутри каждой последовательности определяется значениями следующего наиболее значащего столбца сортировки. Мощность каждой последовательности является минимальным числом групп сортировки таких, что для каждой группы с числом строк больше единицы все значения этого столбца сортировки идентичны. iv) Предыдущий параграф применяется по очереди к каждому дополнительному столбцу сортировки. Если группа сортировки состоит из нескольких строк и не является последовательностью групп сортировки, то порядок строк в группе сортировки не определен. v) Пусть С обозначает столбец сортировки и S - последовательность, которая определяется значениями С. vi) Направление сортировки связывается с каждым столбцом сортировки. Если направление для С задано по возрастанию, то первая группа сортировки S содержит наименьшее значение С и каждая последующая группа сортировки содержит значение С большее, чем значение С в предшествующей группе сортировки. Если направление для С задано по убыванию, то первая группа сортировки S содержит наибольшее значение С и каждая последующая группа сортировки содержит значения С меньшее, чем значение С в предшествующей группе сортировки. vii) Упорядоченность определяется правилами сравнения, указанными в 5. 11, " (). Порядок неопределенных значений по отношению к не неопределенным значениям определяется реализацией, но должен быть либо строго больше либо строго меньше всех не неопределенных значений. viii) () специфицирует столбец сортировки и направление. Столбец сортировки - это столбец, указываемый () или (). () i ссылается на i-ый столбец Т. () указывает именованный столбец. ix) Если в () указано DESC, то направление сортировки, специфицируемое этой (), является направлением по убыванию. Если указано АSC или не указано ни ASC, ни DESC, то направление сортировки для этого столбца сортировки является направлением по возрастанию. x) Последовательность () определяет относительную значимость сортируемых столбцов. Столбец сортировки, указанный в первой (), наиболее значащий и каждый последующий столбец сортировки является менее значащим, чем предыдущий столбец сортировки. 8. 4. () Функция Удаляет строку таблицы. Формат : := DELETE FROM WHERE CURRENT OF Синтаксические правила
Применимые (
) для () должны включать DELETE. Замечание: "Применимые (
)" для () определяются в 6. 10, " (
). Содержащий () должен содержать () CR с тем же (), что и () в (). Таблица, на которую указывает CR, не должна быть только читаемой. Пусть Т обозначает таблицу, идентифицируемую (). Т должна быть таблицей, идентифицируемой в первом () в () CR. Общие правила Курсор CR должен быть установлен на строку. Строка, из которой получена текущая строка CR, удаляется.
8. 5. () Функция Удаляет строки таблицы. Формат : := DELETE FROM WHERE [] Синтаксические правила
Применимые (
) для () должны включать DELETE. Замечание: Применимые (
) для () определяются в 6. 10, " (
)". Пусть Т обозначает таблицу, идентифицируемую (). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в () любого (), содержащегося в (). Область действия () - целиком (. Общие правила
а) Если не указано (), то удаляются все строки таблицы Т. б) Если указано (), то условие применяется к каждой строке Т с (), связанным с этой строкой, и все строки, для которых результат () есть true, удаляются. Каждый () в () реально выполняется для каждой строки T и результаты используются в применении () к данной строке Т. Если любой выполняемый () содержит внешнюю ссылку на столбец Т, то эта ссылка указывает на значение этого столбца в данной строке Т. Замечание: "Внешняя ссылка" определяется в 5. 7, " ()". 8. 6. () Функция
Устанавливает курсор на следующую строку таблицы и выбирает значения из этой строки. Формат : := FETCH INTO : := [{, }.... ] Синтаксические правила
Содержащий () должен содержать () CR с тем же (), что и () в (). Пусть Т обозначает таблицу, специфицированную через () CR. Число () в () должно быть таким же как степень таблицы Т.
а) Если тип данных цели, указанной i-ой () (), является типом символьных строк, то тип данных i-ого столбца таблицы Т должен быть типом символьных строк. b) Если тип данных цели, указанной i-ой () (), является типом точных чисел, то тип данных i-ого столбца таблицы Т должен быть типом точных чисел. c) Если тип данных цели, указанной i-ой () (), является типом приблизительных чисел, то тип данных i-ого столбца таблицы Т должен быть типом приблизительных чисел или типом точных чисел. Общие правила Курсор CR должен быть в открытом состоянии.
Если таблица, указываемая курсором CR, является пустой, или CR позиционирован на последнюю строку или за ней, то CR устанавливается в позицию после последней строки, параметру SQLCODE присваивается значение 100 и значения не присваиваются целям, идентифицированным в (). Если CR установлен в позицию перед строкой, то CR устанавливается на эту строку и значения этой строки присваиваются соответствующим целям. Если CR установлен на r, где r - это строка, отличная от последней строки, то курсор устанавливается на строку, непосредственно следующую за строкой r, и значения из строки за r присваиваются соответствующим целям. Присваивание значений целям в (), кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним. Если в процессе присваивания значения цели возникает ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации. Пусть V обозначает цель, а v - соответствующее значение в текущей строке CR. Если v - это неопределенное значение, то для V должен быть специфицирован индикатор, и этот индикатор устанавливается в -1. Если v - не неопределенное значение, и V обладает индикатором, то: a) Если тип данных V есть тип символьных строк длины L и длина M v больше L, то индикатор получает значение M. b) Иначе значение индикатора устанавливается в 0.
Цель, идентифицированная i-той () из (), соответствует 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. () Функция Создает новые строки в таблице Формат : := INSERT INTO [()] {VALUES ()|} : := [{, }.... ] : := [{, .... ] : := | NULL Синтаксические правила
Применимые (
) к () должны включать INSERT. Замечание: Применимые (
) для () определяются в 6. 10, " (
)". Пусть Т обозначает таблицу, идентифицируемую (). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в () () или какого-либо (), содержащегося в (). Каждое () в () должно идентифицировать столбец Т, и один и тот же столбец не должен быть идентифицирован более одного раза. Отсутствие () является неявной спецификацией (), который идентифицирует все столбцы Т в порядке возрастания их порядковых позиций внутри Т. Столбец, идентифицированный в (), является объектным столбцом.
а) Если указывается (), то число () в этом () должно быть равно числу () в (). Пусть i-ый элемент () указывает на i-ую () в этом (). b) Если указывается (), то степень таблицы, специфицированной этой (), должна быть равна числу () в (). Пусть i-ый элемент () указывает на i-ый столбец таблицы, специфицированной (). Если i-ый элемент () не является неопределенным (), то: а) Если тип данных столбца таблицы Т, указанный i-ым (), является типом символьных строк длины L, то тип данных i-ого элемента () должен быть типом символьных строк с длиной меньшей или равной L. b) Если тип данных столбца таблицы Т, указанный i-ым (), является типом точных чисел, то тип данных i-ого элемента () должен быть типом точных чисел. c) Если тип данных столбца таблицы Т, указанный i-ым (), является типом приблизительных чисел, то тип данных i-ого элемента () должен быть типом приблизительных чисел или типом точных чисел. Общие правила Строка вставляется по следующим шагам:
а) Фактически создается возможная строка, как это указано в Общих правилах 6. 4, " ()". Если Т - это базовая таблица В, то возможная строка включает каждый столбец В. Если Т - это представляемая таблица, то возможная строка включает каждый столбец базовой таблицы В, из которой порождается Т. b) Для каждого объектного столбца в возможной строке его значение заменяется на вставляемое значение. c) Возможная строка вставляется в таблицу В.
Если Т - представляемая таблица, определенная через () с "WITH CHECK OPTION", то если (), содержащаяся в (), включает (), не содержащийся в (), то () этого () должно быть истинным для возможной строки. Если указывается (), то: а) Если i-ое () из () является (), то значение столбца возможной строки, соответствущего i-ому объектному столбцу, является значением этой (). b) Если i-ое () из () является неопределенным значением, то значение столбца возможной строки, соответствующего i-ому объектному столбцу, является неопределенным значением. Если указывается (), то пусть R обозначает результат этой (). Если R пуст, то параметру SQLCODE присваивается значение 100, и никакая строка не вставляется. Число созданных возможных строк равно мощности R. Вставляемые значения одной возможной строки являются значениями одной строки R, и значения в одной строке R являются вставляемыми значениями одной возможной строки. Пусть V обозначает строку R или последовательность значений специфицированных (insert value list>). Тогда i-ое значение V является вставляемым значением объектного столбца, идентифицируемого i-ым () в (). Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное вставляемое значение С.
а) Если тип данных С есть тип символьных строк и длина v равна длине С, то значение С устанавливается в v. b) Если тип данных С есть тип символьных строк и длина M v меньше L, то первые M символов C устанавливаются в v, и в последние L-M символы C заносится символ пробела. c) Если тип данных С есть тип точных чисел, то должно существовать представление значения v в типе данных С такое, чтобы не потерялись никакие первые значащие цифры, и это представление становится значением С. d) Если тип данных С есть тип приблизительных чисел, то значением С становится приблизительное значение v. 8. 8. () Функция Открывает курсор Формат : := OPEN Синтаксические правила
Содержащий () должен содержать () CR с тем же (), что и () в (). Общие правила Курсор CR должен быть в закрытом состоянии.
Пусть S обозначает ( курсора CR. Курсор CR переводится в открытое состояние следующими шагами: а) Фактически создается копия S, в которой каждая () заменяется на значение идентифицируемой цели. b) Если S специфицирует только читаемую таблицу, то эта таблица фактически создается в соответствии со спецификацией - копией S. c) Курсор CR переводится в открытое состояние и его позиция устанавливается перед первой строкой таблицы. 8. 9. () Функция Завершает текущую транзакцию с откатом. Формат : := ROLLBACK WORK Синтаксические правила Нет. Общие правила
Любые изменения базы данных, совершенные в текущей транзакции, аннулируются. Любой курсор, открывавшийся в текущей транзакции, закрывается. Текущая транзакция завершается. 8. 10. () Функция Выбирает значения из специфицированной строки таблицы. Формат : := SELECT [ALL | DISTINCT] INTO : := [{, }.... ] Синтаксические правила
Применимые (
) для каждого () должны включать SELECT. Замечание: Применимые (
) для () определяются в 6. 10, " (
)". () не должно включать () или и не должно идентифицировать сгруппированное представление. Число элементов в () должно быть таким же, как число элементов в ().
а) Если тип данных цели, указанной i-ой () в (), является типом символьных строк, то тип данных i-ого () в () должен быть типом символьных строк. b) Если тип данных цели, указанной i-ой () в (), является типом целых чисел, то тип данных i-ого () в () должен быть типом точных чисел. c) Если тип данных цели, указанной i-ой () в (), является типом приблизительных чисел, то тип данных i-ого () () должен быть типом приблизительных чисел. Пусть S обозначает () с теми же () и (), какие указаны в (), и содержащий ALL или DISTINCT, если они присутствуют в (). S должна быть допустимой (). Общие правила
Пусть R обозначает результат () S. Мощность R не должна быть больше единицы. Если R пуст, то параметру SQLCODE присваивается значение 100 и и значения не присваиваются целям, идентифицированным в (). Если R не пуст, то значения строки R присваиваются соответствующим целям. Присваивание значений целям из (), кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним. Если в процессе присваивания значений целям фиксируется ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации. Цель, идентифицированная i-той () из (), соответствует 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 SET [{, }.... ] WHERE CURRENT OF : := = { | NULL } : := Синтаксические правила
"Применимые (
)" к () должны включать привилегию UPDATE для каждого (). Замечание: "Применимые (
)" для () определяются в 6. 10, " (
)". Содержащий () должен содержать () CR с тем же (), что и () в (). Таблица, на которую указывает CR, не должна быть только читаемой. Пусть Т обозначает таблицу, идентифицируемую (). Т должна быть таблицей, идентифицированной в первом () () CR. () в () не должно включать (). Каждое (), специфицированное как (), должно идентифицировать столбец T. Один () не должен появляться более одного раза в (). Область действия () - целиком весь оператор (). Для каждого (): а) Если специфицировано неопределенное значение, то для столбца, указанного (), должно до пускаться неопределенное значение. b) Если тип данных столбца, указанного (), является типом символьных строк длины L, то тип данных () должен быть типом символьных строк с длиной, меньшей или равной L. c) Если тип данных столбца, указанного (), является типом точных чисел, то тип данных () должен быть типом точных чисел. d) Если тип данных столбца, указанного (), является типом приблизительных чисел, то тип данных () должен быть типом приблизительных чисел или типом точных чисел. Общие правила Курсор CR должен быть установлен на строку.
Объектная строка является такой строкой, из которой порождена текущая строка CR. Объектная строка модифицируется согласно спецификации каждого (). () специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный () в (). Значение модификации может быть неопределенным значением или значением, специфицируемым (). Если () содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки. Объектная строка модифицируется по следующим шагам:
а) Создается возможная строка, которая является копией объектной строки. b) Для каждого () значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации. c) Объектная строка заменяется на возможную строку.
Если Т- это представляемая таблица, определенная через () с "WITH CHECK OPTION", то если (), содержащееся в (), включает (), не содержащийся в (), то () этого () должно быть 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 SET [{, }.... ] [WHERE ] : := = { | NULL } : := Синтаксические правила
"Применимые (
)" для () должны включать UPDATE для каждого (). Замечание: Применимые (
) для () определяются в 6. 10, " (
)". Пусть Т обозначает таблицу, идентифицируемую (). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в () любого (), содержащегося в (). () в () не должно включать (). Каждое (), специфицированное как (), должно идентифицировать столбец T. Один () не должен появляться более одного раза в (). Область действия () - целиком (. Для каждого (): а) Если специфицировано неопределенное значение, то для столбца, указанного (), должно допускаться неопределенное значение. b) Если тип данных столбца, указанного (), является типом символьных строк длины L, то тип данных () должен быть типом символьных строк с длиной меньшей или равной L. c) Если тип данных столбца, указанного (), является типом точных чисел, то тип данных () должен быть типом точных чисел. d) Если тип данных столбца, указанного (), является типом приблизительных чисел, то тип данных () должен быть типом приблизительных чисел или типом точных чисел. Общие правила
а) Если не специфицировано (), то все строки Т являются объектными строками. b) Если условие поиска специфицировано, то это условие применяется к каждой строке Т с (), связанным с этой строкой, и объектными строками являются все строки, для которых результат () есть true. Каждый () в () фактически выполняется для каждой строки T, и результат используется при применении () к данной строке Т. Если какой-либо выполняемый () содержит внешнюю ссылку на столец Т, то она указывает на значение этого столбца в данной строке Т. Замечание: "Внешняя ссылка" определяется в 5. 7, ". Каждая объектная строка модифицируется согласно спецификации каждого (). () специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный (). Значение модификации может быть неопределенным значением или значением, специфицируемым (). Если () содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки. Объектная строка модифицируется по следующим шагам:
а) Создается возможная строка, которая является копией объектной строки. b) Для каждого () значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации. c) Объектная строка заменяется на возможную строку.
Если Т- это представляемая таблица, определенная через () с "WITH CHECK OPTION", то если (), содержащееся в (), включает (), не содержащийся в (), то () этого () должно быть 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. Уровни
Этот стандарт специфицирует два уровня и отдельные средства поддержания целостности данных. Средства поддержания целостности данных образуют следующие синтаксические конструкции вместе с Синтаксическими правилами и Общими правилами: ()
все опции (), отличные от NOT NULL и NOT NULL UNIQUE все опции (), кроме опции UNIQUE (UNIQUE ()). REFERENCES ( REFERENCES [ ()]) Уровень 2 - это полный язык базы данных SQL, не включающий средства улучшения целостности данных. Уровень 1 - это подмножество уровня 2, которое подчиняется следующим дополнительным правилам. 4. 16, "Транзакции": а) Первое предложение параграфа 1 заменяется следующим:
Транзакция - это последовательность операций, включающая операции над базой данных, которые являются атомарными по отношению к восстановлению. b) Параграф 2 удаляется. c) Второе предложение параграфа 3 удаляется. 5. 3, "Лексемы ():
() не должен состоять более чем из 12 символов. 5. 4, "Имена":
() не должно содержать (). 5. 6, " () и ()": а) () не должна содержать USER. b) (
) не должна специфицировать (). c) () не должна специфицировать (). 5. 7, " ()" : К синтаксическому правилу 4 добавляется следующее:
() не должна быть внешней ссылкой. 5. 8, " ()" 5. 24, (), и 5. 25, (): (), () и ) не должны содержать ALL.
Замечание: на уровне 1 сохранение дубликатов специфицируется отсутствием DISTINCT. 5. 8, " ()": () не должны включать AVG, MAX, MIN или SUM. 5. 11, " ()" : () не должен включать "". Замечание: на уровне 1 сравнение в форме "A B" выражается через эквивалент "NOT A=B". 5. 14, " ():
а) () не должен специфицировать ESCAPE (). b) () не должен специфицировать NOT. Замечание: на уровне 1 (), содержащий NOT, может быть выражен в эквивалентной форме (): "NOT ". 5. 17, " ()":
(
) не должен специфицировать (). 5. 22, "" ()": Следующее предложение добавляется к Общему правилу 2:
Группирование строк, в которых значения одного или нескольких столбцов группировки являются неопределенными, определяется в реализации. 5. 25, " ()": Синтаксическое правило 11 заменяется на следующее:
Распознавание того, является ли () изменяемой или только читаемой, определяется в реализации. 6. 1, " ()": () не должна специфицироваться.
Уровень 1 реализации должен обеспечивать некоторый механизм связи () с (), () или (
). 6. 2, " ()":
() не должно содержать (). Уровень реализации 1 должен обеспечивать некоторый механизм спецификации ограничения таблицы, связанного с уникальностью. 6. 3, " ():
а) () в () не должен включать REAL, DOUBLE, PRECISION и NUMERIC. b) () столбца не должно специфицировать NOT NULL. c) () столбца не должно специфицировать UNIQUE. 6. 9, " ():
() не должно содержать WITH CHECK OPTION. 6. 10, " (
)" : (
) не должно содержать WITH GRANT OPTION. 7. 3, " (
):
а) Cинтаксическое правило 8 (a) (2) заменяется на следующее: Любой () в (
) должен специфицировать тип CHARACTER. b) В общем правиле 3 случай (a) каждое вхождение числа "100" заменяется на слова "положительное число со значением, определяемым реализацией" c) Общее правило 3 (b) (1) заменяется на следующее:
В реализации определяется, аннулируются ли при выполнении S изменения, произведенные в базе данных. 8. 3, " ()":
а) () не должна содержать (). b) () не должна содержать ASC. Замечание: на уровне 1 порядок по возрастанию специфицируется отсутствием опции DESC. c) () не должно содержать UNION. Замечание: на уровне 1 функция объединения не поддерживается. 8. 7, " () :
() не должен содержать (). 8. 11, " ()" и (): () не должен специфицировать () или ().