Информация о готовой работе
Бесплатная студенческая работ № 12573
Язык модулей SQL 7.1 <Модуль> (<module>) Функция Определяет модуль. Формат <module> ::= <module name clause> <language clause> <module autorization clause> [<declare cursor>...] < procedure > ... <language clause> ::= LANGUAGE { COBOL | FORTRAN | PASCAL | PLI } <module autorization clause> ::= AUTHORIZATION <module autorization identifier> <module autorization identifier> ::= <autorization identifier> Синтаксические правила
- Для каждого <определения курсора> (<cursor declare>) в <модуле> (<module>) должна существовать ровно одна <процедура> (<procedure>) в этом <модуле> (<module>), которая содержит <оператор открытия> (<open statement>) со спецификацией <имени курсора> (<cursor name>), объявленного в <объявлении курсора> (<cursor declare>).
- <Модуль> (<module>) должен быть ассоциирован с прикладной программой при ее выполнения. Прикладная программа должна быть ассоциирована не более чем с одним <модулем> (<module>).
Общие правила
- Если <раздел языка> (<language clause>) <модуля> (<module>) специфицирует COBOL (соответственно FORTRAN, PASCAL, PLI) и если агент, выполняющий вызов <процедуры> (<procedure>) этого <модуля> (<module>), не является стандартной программой на языке COBOL (соответственно FORTRAN, Pascal, PL/1), то результат неопределен.
- После выполнения агентом на языке программирования последнего вызова <процедуры> (<procedure>) в <модуле> (<module>) неявно выполняется <оператор фиксации> (<commit statement>) или <оператор отката> (<rollback statement>). Выбор одного из этих <операторов SQL> (<SQL statement>) определяется реализацией. Если имеет место невосстанавлваемая ошибка, то СУБД должна выполнить <оператор отката> (<rollback statement>).
- <Раздел имени модуля> (<module name clause>)
Функция Задает имя <модуля> (<module>). Формат <module name clause> ::= MODULE [<module name>] Синтаксические правила 1.<Имя модуля> (<module name>) должно отличаться от <имени модуля> (<module name>) любого другого <модуля> (<module>) в том же окружении. Понятие окружения определяется в реализации. Общие правила 1.<Раздел имени модуля> (<module name clause>) определяет необязательный <идентификатор> (<identifier>) как <имя модуля> (<module name>), определяющее содержащий <модуль> (<module>) в данном окружении. 7.3. <Процедура> (<procedure>) Функция Определяет процедуру и оператор языка SQL. Формат <procedure> ::= PROCEDURE <procedure name> <parameter declaration>...; <SQL statment>; <parameter declaration>::= <parameter name> <data type> | <SQLCODE parameter> <SQLCODE parameter> ::= SQLCODE <SQL statement> ::= <close statement> | <commit statement> | <delete statement positioned> | <delete statement searched> | <fetch statement> | <insert statement> | <open statement> | <rollback statement> | <select statement> | <update statement positioned> | <update statement searched> Синтаксические правила
- <Имя процедуры> (<procedure name>) должно отличаться от <имени процедуры> (<procedure name>) любой другой <процедуры> (<procedure>) в содержащем модуле.
- <Имя параметра> <parameter name> в каждом <объявлении параметра> (<parameter declaration>) в <процедуре> (<procedure>) должно отличаться от <имени параметра> (<parameter name>) любого другого <объявления параметра> (<parameter declaration>) в этой процедуры.
- Любое <имя параметра> (<parameter name>), содержащееся в <операторе SQL> (<SQL statement>) <процедуры> (<procedure>), должно быть специфицировано в <объявлении параметра> (<parameter declaration>) этой процедуры.
- Если <имя столбца> (<column name>) в <операторе SQL> (<SQL statement>) совпадает с <именем параметра> (<parameter name>) в <объявлении параметра> (<parameter declaration>) <процедуры> (<procedure>), содержащей этот <оператор SQL> (<SQL statement>), то <спецификация столбца> (<column specification>), которая содержит это <имя столбца> (<column name>), должна содержать <квалификатор> (<qualifier>).
- Законный вызов <процедуры> (<procedure>) должен поставлять n параметров, где n - число <объявлений параметров> (<parameter declaration>) в данной <процедуре> (<procedure>).
- Процедура должна содержать ровно один <параметр SQLCODE> (<SQLCODE parameter>). На параметр, соответствующий параметру SQLCODE, ссыля4аются я0как я4на параметр SQLCODE.
- <Разделом языка> (<language clause>) процедуры явля<раздел языка> (<language clause>) содержащего <модуля> (<module>).
a) Если <раздел языка> (<language clause>) специфицирует COBOL, то: o i) Типом параметра SQLCODE должен быть COMPUTATIONAL S9(PC), где PC - определяемая реализацией точность, большая или равная 4. ii) Любой <тип данных> (<data type>) в <объявлении параметров> (<parameter declaration>) должен быть CHARACTER или NUMERIC. iii) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует <тип данных> (<data type>) CHARACTER(L) c некоторой <длиной> (<lenght>) L, то тип i-ого параметра должен быть буквенно-цифровым типом языка COBOL длины L. iv) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует <тип данных> (<data type>) NUMERIC(P,S) c некоторыми <точностью> (<precision>) P и <масштабом> (<scale>) 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) Если <раздел языка> (<language clause>) специфицирует FORTRAN, то: o i) Тип параметра SQLCODE должен быть типом INTEGER языка FORTRAN. ii) Любой <тип данных> (<data type>) в <объявлении параметра> должен быть CHARACTER, INTEGER, REAL или DOUBLE PRECISION. iii) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует <тип данных> (<data type>) CHARACTER(L) с некоторой <длиной> (<lenght>) L, то тип i-ого параметра должен быть типом CHARACTER языка FORTRAN с длиной L. vi) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует <тип данных> (<data type>) данных INTEGER, REAL или DOUBLE PRECISION, то тип i-ого параметра должен быть соответственно INTEGER, REAL или DOUBLE PRECISION языка FORTRAN.
c) Если <раздел языка> (<language clause>) специфицирует PASCAL, то: o i) Тип параметра SQLCODE должен быть типом INTEGER языка Pascal. ii) Любой <тип данных> (<data type>) в <объявлении параметра> (<parameter declaration>) должен быть CHARACTER, INTEGER, или REAL. iii) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует <тип данных> (<data type>) CHARACTER(L) с некоторой <длиной> (<lenght>) L, то тип i-ого параметра должен быть типом строки языка Pascal длины L. iv) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует <тип данных> (<data type>) INTEGER или REAL, то тип i-ого параметра должен быть соответственно типом INTEGER, или REAL языка Pascal.
d) Если <раздел языка> (<language clause>) специфицирует PL1, то: o i) Тип параметра SQLCODE должен быть FIXED BINARY(PP), где РР определяемая реализацией точность, большая или равная 15. ii) Любой <тип данных> (<data type>) в <объявлении параметра> (<parameter declaration>) должен быть CHARACTER, DECIMAL, или FLOAT. iii) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует тип данных CHARACTER(L) с некоторой <длиной> (<lenght>) L, то тип i-ого параметра должен быть типом CHARACTER языка PL/1 с длиной L. vi) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует тип данных DECIMAL(P,S) с некоторыми <точностью> (<precision>) P и <масштабом> (<scale>) S, то тип i-ого параметра должен быть типом FIXED REAL DECIMAL(P,S) языка PL/1. v) Если i-ое <объявление параметра> (<parameter declaration>) специфицирует тип данных FLOAT(P) с некоторой <точностью> (<precision>) P, то тип i-ого параметра должнен быть типом FLOAT REAL BINARY (P) языка PL/1. Общие правила
- <Процедура> (<procedure>) определяет процедуру, которая может вызываться определяемым реализацией агентом.
- Когда процедура вызывается агентом языка программирования:
а) Если для этого агента нет активной транзакции, то транзакция фактически инициируется и связывается с этим вызовом и с последующими вызовами этим агентом любой <процедуры> (<procedure>) в содержащем <модуле> (<module>), до тех пор, пока данный агент не закончит эту транзакцию. b) Выполняется <оператор SQL> (<SQL statement>) S данной <процедуры> (<procedure>). 3. а) Если S выполнен успешно, то o i) Если S - <оператор чтения> (<fetch statement>) , для которого следующая строка не существует, то в параметр SQLCODE устанавливается значение 100. ii) Если S - <оператор вставки> (<insert statement>), для которого не нашлось ни одной возможной строки, то в параметр SQLCODE устанавливается значение 100. iii) Если S - <оператор выборки> (<select statement>), результатом которого явилась пустая таблица, то в параметр SQLCODE устанавливается значение 100. iv) Если S - <оператор модификации: поисковый> (<update statement: searched>) или <оператор удаления: поисковый>) (<delete statement: searched>) с поиском, для которых не нашлись объектные строки для модификации или удаления, то в параметр SQLCODE устанавливается значение 100. v) Во всех остальных случаях в параметр SQLCODE устанавливается 0.
b) Если S выполнен неуспешно, то o i) Все изменения, произведенные над базой данных при выполнении S, аннулируются. ii) В параметр SQLCODE устанавливается отрицательное число со значением, определяемым реализацией Язык манипулирования данными (data manipulation language) 8.1 <Оператор закрытия> (<close statement>) Функция Закрыть курсор. Формат <close statement>::= CLOSE <cursor name> Синтаксические правила 1.Объемлющий модуль должен содержать объявление курсора, в котором используется это же имя курсора. Общие правила
- Курсор должен быть в открытом состоянии.
- Курсор переводится в закрытое состояние и разрушается копия <спецификации курсора> (<cursor soecificaton>).
- <Оператор фиксации> (<commit statement>)
Функция Заканчивает текущую транзакцию с фиксацией. Формат <commit statement>::= COMMIT WORK Синтаксические правила Нет. Общие правила
- Текущая транзакция завершается.
- Закрываются любые курсоры, открытые данной транзакцией.
- Любые изменения базы данных, сделанные в текущей транзакции, фиксируются.
- <Объявление курсора> (<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>)". 3.Пусть Т обозначает таблицу, специфицированную в <спецификации курсора> (<cursor specification>). 4. a) Если указано ORDER BY, то Т является только читаемой таблицей со специфицированным порядком сортировки. b) Если не указаны ни ORDER BY ни UNION и <спецификация запроса> (<query specification>) является из меняемой (updatable), то Т - изменяемая таблица. c) Иначе Т - только читаемая таблица. 5. 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. 6.Если указано 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>). Общие правила 1. a) Если Т изменяемая (updatable) таблица, то курсор ассоциируется с именованной таблицей, идентифицируемой <именем таблицы> (<table name>) из <раздела from> (<from clause>). Пусть В обозначает эту именованную таблицу. Для каждой строки в Т существует соответствующая строка в В, из которой получена строка таблицы Т. Когда курсор установлен на строку таблицы Т, курсор также установлен на соответствующую строку таблицы В. b) В противном случае курсор не ассоциируется с именованной таблицей. 2. a) Если не указано UNION, то Т - это результат указанной <спецификации запроса> (<query specification>. b) Если UNION указано, то пусть для каждого указанного UNION Т1 и Т2 обозначают результаты <выражения запроса> (<query expression>) и <терма запроса> (<query term>). Результат UNION фактически порождается следующим образом: i) Инициализировать результат как пустую таблицу. o ii) Занести в результат каждую строку Т1 и каждую строку Т2 iii) Если не указано ALL , то удалить все излишние дубликаты строк из результата. 3. a) Если не указано ORDER BY, то: o i) Порядок строк в Т определяется реализацией. ii) Порядок строк может может быть разным в разных транзакциях. iii) Порядок строк Т, устанавливаемый при открытии курсора, будет таким же при следующем открытии курсора в этой же транзакции при условии, что:
- Отсутствуют сторонние изменения каких-либо таблиц, указанным в спецификации курсора.
- Упорядоченный набор значений параметров, передаваемых в <процедуру> (<procedure>), содержащую <оператор открытия> (<open statement>), является одинаковым в обоих случаях.
Если эти условия не удовлетворяются, то упорядочение строк в Т может различаться при последовательных открытиях курсора в одной транзакции.
b) Если ORDER BY указано, то Т обладает порядком сортировки: o 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> Синтаксические правила 1.Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать DELETE. Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в 6.10, "<Определение привилегий> (<privileges definition>). 2.Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе удаления: позиционном> (<delete statement: positioned>). 3.Таблица, на которую указывает CR, не должна быть только читаемой. 4.Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т должна быть таблицей, идентифицируемой в первом <разделе from> (<from clause>) в <спецификации курсора> (<cursor specification>) CR. Общие правила
- Курсор CR должен быть установлен на строку.
- Строка, из которой получена текущая строка CR, удаляется.
- <Оператор удаления: поисковый> (<delete statement: searched>)
Функция Удаляет строки таблицы. Формат <delete statement: searched> ::= DELETE FROM <table name> WHERE [<search condition>] Синтаксические правила 1.Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать DELETE. Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)". 2.Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) любого <подзапроса> (<subquery>), содержащегося в <условии поиска> (<search condition>). 3.Область действия <имени таблицы> (<table name>) - целиком <оператор удаления: поисковый> (<delete statement: searched>. Общие правила 1. а) Если не указано <условие поиска> (<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. 9.Цель, идентифицированная i-той <спецификацией цели> (<target specification>) из <списка целей чтения> (<fetch target list>), соответствует i-ому значению из текущей строки CR. 10. 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 statement>) Функция Создает новые строки в таблице Формат <insert statement> ::= INSERT INTO <table name> [(<insert column list>)] {VALUES (<insert value list>)|<query specification>} <insert column list> ::= <column name> [{,<column name>}...] <insert value list> ::= <insert value> [{,<insert value>...] <insert value> ::= <value specification> | NULL Синтаксические правила 1.Применимые <привилегии> (<privileges>) к <имени таблицы> (<table name>) должны включать INSERT. Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)". 2.Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) <спецификации запроса> (<query specification>) или какого-либо <подзапроса> (<subquery>), содержащегося в <спецификации запроса> (<query specification>). 3.Каждое <имя столбца> (<column name>) в <списке столбцов вставки> (<insert column list>) должно идентифицировать столбец Т, и один и тот же столбец не должен быть идентифицирован более одного раза. Отсутствие <списка столбцов вставки> (<insert column list>) является неявной спецификацией <списка столбцов вставки> (<insert column list>), который идентифицирует все столбцы Т в порядке возрастания их порядковых позиций внутри Т. 4.Столбец, идентифицированный в <списке столбцов вставки> (<insert column list>), является объектным столбцом. 5. а) Если указывается <список вставляемых значений> (<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>). 6.Если 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>) должен быть типом приблизительных чисел или типом точных чисел. Общие правила 1.Строка вставляется по следующим шагам: а) Фактически создается возможная строка, как это указано в Общих правилах 6.4, "<Раздел умолчания> (<default clause>)". Если Т - это базовая таблица В, то возможная строка включает каждый столбец В. Если Т - это представляемая таблица, то возможная строка включает каждый столбец базовой таблицы В, из которой порождается Т. b) Для каждого объектного столбца в возможной строке его значение заменяется на вставляемое значение. c) Возможная строка вставляется в таблицу В. 2.Если Т - представляемая таблица, определенная через <определение представления> (<view definition>) с "WITH CHECK OPTION", то если <спецификация запроса> (<query specification>), содержащаяся в <определении представления> (<view definition>), включает <раздел where> (<where clause>), не содержащийся в <подзапросе> (<subquery>), то <условие поиска> (<search condition>) этого <раздела where> (<where clause>) должно быть истинным для возможной строки. 3.Если указывается <список вставляемых значений> (<insert value list>), то: а) Если i-ое <вставляемое значение> (<insert value>) из <списка вставляемых значений> (<insert value list>) является <спецификацией значения> (<value specification>), то значение столбца возможной строки, соответствущего i-ому объектному столбцу, является значением этой <спецификации значения> (<value specification>). b) Если i-ое <вставляемое значение> (<insert value>) из <списка вставляемых значений> (<insert value list>) является неопределенным значением, то значение столбца возможной строки, соответствующего i-ому объектному столбцу, является неопределенным значением. 4.Если указывается <спецификация запроса> (<query specification>), то пусть R обозначает результат этой <спецификации запроса> (<query specification>). Если R пуст, то параметру SQLCODE присваивается значение 100, и никакая строка не вставляется. Число созданных возможных строк равно мощности R. Вставляемые значения одной возможной строки являются значениями одной строки R, и значения в одной строке R являются вставляемыми значениями одной возможной строки. 5.Пусть V обозначает строку R или последовательность значений специфицированных <списком вставляемых значений> (insert value list>). Тогда i-ое значение V является вставляемым значением объектного столбца, идентифицируемого i-ым <именем столбца> (<column name>) в <списке вставляемых столбцов> (<insert column list>). 6.Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное вставляемое значение С. 7. а) Если тип данных С есть тип символьных строк и длина 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> Синтаксические правила 1.Содержащий <модуль> (<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 Синтаксические правила Нет. Общие правила
- Любые изменения базы данных, совершенные в текущей транзакции, аннулируются.
- Любой курсор, открывавшийся в текущей транзакции, закрывается.
- Текущая транзакция завершается.
- <Оператор выборки> (<select statement>)
Функция Выбирает значения из специфицированной строки таблицы. Формат <select statement> ::= SELECT [ALL | DISTINCT] <select name> INTO <select target list> <table expression> <select target list>::= <target specification> [{,<target specification>}...] Синтаксические правила 1.Применимые <привилегии> (<privileges>) для каждого <имени таблицы> (<table name>) должны включать SELECT. Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)". 2.<Выражение, <вырабатывающее таблицу> (<table expression>) не должно включать <раздел group by> (<group by clause>) или <раздел having> <having clause> и не должно идентифицировать сгруппированное представление. 3.Число элементов в <списке выборки> (<select list>) должно быть таким же, как число элементов в <списке целей выборки> (<select target list>). 4. а) Если тип данных цели, указанной 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>) должен быть типом приблизительных чисел. 5.Пусть 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. 9. 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 statement: positioned>) Функция Модифицирует строку таблицы. Формат <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> Синтаксические правила 1."Применимые <привилегии> (<privileges>)" к <имени таблицы> (<table name>) должны включать привилегию UPDATE для каждого <объектного столбца: позиционного> (<object column: positioned>). Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)". 2.Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе модификации: позиционном> (<update statement: positioned>). 3.Таблица, на которую указывает CR, не должна быть только читаемой. 4.Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т должна быть таблицей, идентифицированной в первом <разделе from> (<from clause>) <спецификации курсора> (<cursor specification>) CR. 5.<Выражение, вырабатывающее значение> (<value expression>) в <разделе установки: позиционной> (<set clause: positioned>) не должно включать <спецификацию функции над множеством> (<set function specification>). 6.Каждое <имя столбца> (<column name>), специфицированное как <объектный столбец: позиционный> (<object column: positioned>), должно идентифицировать столбец T. Один <объектный столбец: позиционный> (<object column: positioned>) не должен появляться более одного раза в <операторе модификации: позиционном> (<update statement: positioned>). 7.Область действия <имени таблицы> (<table name>) - целиком весь оператор <модификации: позиционный> (<update statement: positioned>). 8.Для каждого <раздела установки: позиционного> (<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) Объектная строка заменяется на возможную строку. 5.Если Т- это представляемая таблица, определенная через <определение представления> (<view definition>) с "WITH CHECK OPTION", то если <спецификация запроса> (<query specification>), содержащееся в <определении представления> (<view definition>), включает <раздел where> (<where clause>), не содержащийся в <подзапросе> (<subquery>), то <условие поиска> (<search condition>) этого <раздела where> (<where clause>) должно быть true для возможной строки. 6.Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное значение модификации С. 7. 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 statement: searched>) Функция Модифицирует строки таблицы. Формат <update statement: searched> ::= UPDATE <table name> SET <set clause: searched> [{,<set clause: searched>}...] [WHERE <search conditions>] <set clause: searched> ::= <object column: searched> = { <value expression> | NULL } <object column: searched> ::= <column name> Синтаксические правила 1."Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) должны включать UPDATE для каждого <имени столбца: поискового> (<object column: searched>). Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)". 2.Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) любого <подзапроса> (<subquery>), содержащегося в <условии поиска> (<search condition>). 3.<Выражение, вырабатывающее значение> (<value expression>) в <разделе установки: поисковой> (<set clause: searched>) не должно включать <спецификацию функции над множеством> (<set function specification>). 4.Каждое <имя столбца> (<column name>), специфицированное как <объектный столбец: поисковый> (<object column: searched>), должно идентифицировать столбец T. Один <объектный столбец: поисковый> (<object column: searched>) не должен появляться более одного раза в <операторе модификации: поисковом> (<update statement: searched>). 5.Область действия <имени таблицы> (<table name>) - целиком <оператор модификации: поисковый> (<update statement: searched>. 6.Для каждого <раздела установки: поискового> (<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>) должен быть типом приблизительных чисел или типом точных чисел. Общие правила 1. а) Если не специфицировано <условие поиска> (<search condition>), то все строки Т являются объектными строками. b) Если условие поиска специфицировано, то это условие применяется к каждой строке Т с <именем таблицы> (<table name>), связанным с этой строкой, и объектными строками являются все строки, для которых результат <условия поиска> (<search condition>) есть true. Каждый <подзапрос> (<subquery>) в <условии поиска> (<search condition>) фактически выполняется для каждой строки T, и результат используется при применении <условия поиска> (<search condition>) к данной строке Т. Если какой-либо выполняемый <подзапрос> (<subquery>) содержит внешнюю ссылку на столец Т, то она указывает на значение этого столбца в данной строке Т. Замечание: "Внешняя ссылка" определяется в 5.7, "<column specification">. 2.Каждая объектная строка модифицируется согласно спецификации каждого <раздела установки: поисковой> (<set clause: searched>). <Раздел установки: поисковой> (<set clause: searched>) специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный <объектным столбцом: поисковым> (<object column: searched>). Значение модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (<value expression>). Если <выражение, вырабатывающее значение> (<value expression>) содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки. 3.Объектная строка модифицируется по следующим шагам: а) Создается возможная строка, которая является копией объектной строки. b) Для каждого <раздела установки: поисковой> (<set clause: searched>) значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации. c) Объектная строка заменяется на возможную строку. 4.Если Т- это представляемая таблица, определенная через <определение представления> (<view definition>) с "WITH CHECK OPTION", то если <спецификация запроса> (<query specification>), содержащееся в <определении представления> (<view definition>), включает <раздел where> (<where clause>), не содержащийся в <подзапросе> (<subquery>), то <условие поиска> (<search condition>) этого <раздела where> (<where clause>) должно быть true для возможной строки. 5.Пусть С обозначает объектный столбец. Пусть 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. Уровни Этот стандарт специфицирует два уровня и отдельные средства поддержания целостности данных. Средства поддержания целостности данных образуют следующие синтаксические конструкции вместе с Синтаксическими правилами и Общими правилами:
- <Раздел умолчаний> (<default clause>)
- все опции <ограничения на столбец> (<column constraint>), отличные от NOT NULL и NOT NULL UNIQUE
- все опции <определения ограничения на таблицу> (<table constraint definition>), кроме опции UNIQUE <список столбцов уникальности> (UNIQUE (<unique column list>)).
- <действие> REFERENCES <список столбцов передачи> (<action> REFERENCES [ (<grant column list>)])
Уровень 2 - это полный язык базы данных SQL, не включающий средства улучшения целостности данных. Уровень 1 - это подмножество уровня 2, которое подчиняется следующим дополнительным правилам. 1.4.16, "Транзакции": а) Первое предложение параграфа 1 заменяется следующим: Транзакция - это последовательность операций, включающая операции над базой данных, которые являются атомарными по отношению к восстановлению. b) Параграф 2 удаляется. c) Второе предложение параграфа 3 удаляется. 2.5.3, "Лексемы (<token>): <Идентификатор> (<identifier>) не должен состоять более чем из 12 символов. 3.5.4, "Имена": <Имя таблицы> (<table name>) не должно содержать <идентификатор полномочий> (<authorization identifier>). 4.5.6, "<Спецификация значения> (<value specification>) и <спецификация цели> (<target specification>)": а) <Спецификация значения> (<value specification>) не должна содержать USER. b) <Спецификация параметра> (<parameter specification>) не должна специфицировать <парамететр-индикатор> (<indicator parameter>). c) <Спецификация переменной> (<variable specification>) не должна специфицировать <переменную-индикатор> (<indicator variable>). 5.5.7, "<Спецификация столбца> (<column specification>)" : К синтаксическому правилу 4 добавляется следующее: o<Спецификация столбца> (<column specification>) не должна быть внешней ссылкой. 6.5.8, "<Спецификация функции над множеством> (<set function specification>)" 5.24, <Подзапрос> (<subquery>), и 5.25, <Cпецификация запроса> (<query specification>): o<Функция надо всеми элементами множества> (<all set function>), <подзапрос> (<subquery>) и <спецификация запроса (<query specification>) не должны содержать ALL.
Замечание: на уровне 1 сохранение дубликатов специфицируется отсутствием DISTINCT. 7.5.8, "<Спецификация функций над множеством> (<set function specification>)": o<Функция над различными элементами множества> (<distinct set function>) не должны включать AVG, MAX, MIN или SUM. 8.5.11, "<Предикат сравнения> (<comaprison predicate>)" : <Оператор сравнения> (<comp op>) не должен включать "<>". Замечание: на уровне 1 сравнение в форме "A <> B" выражается через эквивалент "NOT A=B". 9.5.14, "<предикат like> (<like predicate>): а) <Предикат like> (<like predicate>) не должен специфицировать ESCAPE <символ escape> (<escape character>). b) <Предикат like> (<like predicate>) не должен специфицировать NOT. Замечание: на уровне 1 <предикат like> (<like predicate>), содержащий NOT, может быть выражен в эквивалентной форме <условия поиска> (<search condition>): "NOT <like predicate>". 10.5.17, "<предикат exists> (<exists predicate>)": o<Предикат> (<predicate>) не должен специфицировать <предикат exists> (<exists predicate>). 11.5.22, "<раздел group by>" (<group by clause>)": Следующее предложение добавляется к Общему правилу 2: oГруппирование строк, в которых значения одного или нескольких столбцов группировки являются неопределенными, определяется в реализации. 12.5.25, "<Спецификация запроса> (<query specification>)": Синтаксическое правило 11 заменяется на следующее: oРаспознавание того, является ли <спецификация запроса> (<query specification>) изменяемой или только читаемой, определяется в реализации. 13.6.1, "<Схема> (<schema>)": <Схема> (<schema>) не должна специфицироваться. Уровень 1 реализации должен обеспечивать некоторый механизм связи <идентификатора полномочий> (<authorization identifier>) с <определением таблицы> (<table definition>), <определением представления> (<view definition>) или <определением привилегий> (<privileges definition>). 14.6.2, "<Определение таблицы> (<table definition>)": <Определение таблицы> (<table definition>) не должно содержать <определение огpаничения уникальности> (<unique constraint definition>). Уровень реализации 1 должен обеспечивать некоторый механизм спецификации ограничения таблицы, связанного с уникальностью. 15.6.3, "<Определение столбцов> (<column definition>): а) <Тип данных> (<data type>) в <определении столбца> (<column definition>) не должен включать REAL, DOUBLE, PRECISION и NUMERIC. b) <Определение столбца> (<column definition>) столбца не должно специфицировать NOT NULL. c) <Определение столбца> (<column definition>) столбца не должно специфицировать UNIQUE. 16.6.9, "<Определение представления> (<view definition>): <Определение представления> (<view definition>) не должно содержать WITH CHECK OPTION. 17.6.10, "<Определение привилегий> (<privilege definition>)" : <Определение привилегий> (<privileges definition>) не должно содержать WITH GRANT OPTION. 18.7.3, "<Процедура> (<procedure>): а) Cинтаксическое правило 8 (a) (2) заменяется на следующее: Любой <тип данных> (<data type>) в <объявлении параметра> (<parameter declaration>) должен специфицировать тип CHARACTER. b) В общем правиле 3 случай (a) каждое вхождение числа "100" заменяется на слова "положительное число со значением, определяемым реализацией" c) Общее правило 3 (b) (1) заменяется на следующее: В реализации определяется, аннулируются ли при выполнении S изменения, произведенные в базе данных. 19.8.3, "<Объявление курсора> (<declare cursor>)": а) <Спецификация сортировки> (<sort specification>) не должна содержать <целых без знака> (<unsigned integer>). b) <Спецификация сортировки> (<sort specification>) не должна содержать ASC. Замечание: на уровне 1 порядок по возрастанию специфицируется отсутствием опции DESC. c) <Выражение запроса> (<query expression>) не должно содержать UNION. Замечание: на уровне 1 функция объединения не поддерживается. 20.8.7, "<Оператор вставки> (<insert statement>) : <Оператор вставки> (<insert statement>) не должен содержать <спецификацию запроса> (<query specification>). 21.8.11, "<Оператор модификации: позиционный> (<update statement: positioned>)" и <оператор удаления: поизиционный> (<delete statement: positioned>): <Оператор SQL> (<SQL statement>) не должен специфицировать <оператор модификации: позиционный> (<update statement: positioned>) или <оператор удаления: позиционный> (<delete statement: positioned>).
Вы можете приобрести готовую работу
Альтернатива - заказ совершенно новой работы?
Вы можете запросить данные о готовой работе и получить ее в сокращенном виде для ознакомления. Если готовая работа не подходит, то закажите новую работуэто лучший вариант, так как при этом могут быть учтены самые различные особенности, применена более актуальная информация и аналитические данные