Доклад: Язык модулей SQL
Язык
модулей SQL
7.1 <Модуль> (<module>)
Функция
Определяет модуль.
Формат
<module> ::= <module name clause> <language clause> <module autorization clause> [<declare cursor>...] < procedure > ... <language clause> ::= LANGUAGE PASCAL <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>).
7.2. <Раздел имени модуля> (<module name clause>)
Функция
Задает имя <модуля> (<module>).
Формат
<module name clause> ::= MODULE [<module name>]
Синтаксические правила
- <Имя модуля> (<module name>) должно отличаться от
<имени модуля> (<module name>) любого другого <модуля>
(<module>) в том же окружении. Понятие окружения определяется в
реализации.
Общие правила
- <Раздел имени модуля> (<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, то:
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,
то:
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,
то:
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, то:
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>).
а) Если S выполнен успешно, то
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 выполнен неуспешно, то
i) Все изменения, произведенные над базой данных при выполнении S,
аннулируются.
ii) В параметр SQLCODE устанавливается отрицательное число со значением,
определяемым реализацией
Язык манипулирования данными (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> ::= <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.
<Оператор вставки> (<insert statement>)
Функция
Создает новые строки в таблице
Формат
<insert statement> ::= INSERT INTO <table name> [(<insert column list>)] <query specification> <insert column list> ::= <column name> [{,<column name>}...] <insert value list> ::= <insert value> [{,<insert value>...] <insert value> ::= <value specification> | NULL
Синтаксические правила
- Применимые <привилегии> (<privileges>) к <имени
таблицы> (<table name>) должны включать INSERT.
Замечание: Применимые <привилегии> (<privileges>) для
<имени таблицы> (<table name>) определяются в 6.10,
"<определение привилегий> (<privileges definition>)".
- Пусть Т обозначает таблицу, идентифицируемую <именем
таблицы> (<table name>). Т не должна быть только читаемой
таблицей или таблицей, которая идентифицируется в <разделе from>
(<from clause>) <спецификации запроса> (<query
specification>) или какого-либо <подзапроса> (<subquery>),
содержащегося в <спецификации запроса> (<query
specification>).
- Каждое <имя столбца> (<column name>) в <списке
столбцов вставки> (<insert column list>) должно идентифицировать
столбец Т, и один и тот же столбец не должен быть идентифицирован более
одного раза. Отсутствие <списка столбцов вставки> (<insert column
list>) является неявной спецификацией <списка столбцов вставки>
(<insert column list>), который идентифицирует все столбцы Т в порядке
возрастания их порядковых позиций внутри Т.
- Столбец, идентифицированный в <списке столбцов вставки>
(<insert column list>), является объектным столбцом.
а) Если указывается <список вставляемых значений> (<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>).
- Если 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>) должен быть типом приблизительных чисел или типом точных
чисел.
Общие правила
- Строка вставляется по следующим шагам:
а) Фактически создается возможная строка, как это указано в Общих правилах
6.4, "<Раздел умолчания> (<default clause>)". Если Т
- это базовая таблица В, то возможная строка включает каждый столбец В.
Если Т - это представляемая таблица, то возможная строка включает каждый
столбец базовой таблицы В, из которой порождается Т.
b) Для каждого объектного столбца в возможной строке его значение
заменяется на вставляемое значение.
c) Возможная строка вставляется в таблицу В.
- Если Т - представляемая таблица, определенная через
<определение представления> (<view definition>) с "WITH
CHECK OPTION", то если <спецификация запроса> (<query
specification>), содержащаяся в <определении представления>
(<view definition>), включает <раздел where> (<where
clause>), не содержащийся в <подзапросе> (<subquery>), то
<условие поиска> (<search condition>) этого <раздела
where> (<where clause>) должно быть истинным для возможной
строки.
- Если указывается <список вставляемых значений> (<insert
value list>), то:
а) Если i-ое <вставляемое значение> (<insert value>) из
<списка вставляемых значений> (<insert value list>) является
<спецификацией значения> (<value specification>), то значение
столбца возможной строки, соответствущего i-ому объектному столбцу,
является значением этой <спецификации значения> (<value
specification>).
b) Если i-ое <вставляемое значение> (<insert value>) из
<списка вставляемых значений> (<insert value list>) является
неопределенным значением, то значение столбца возможной строки,
соответствующего i-ому объектному столбцу, является неопределенным значением.
- Если указывается <спецификация запроса> (<query
specification>), то пусть R обозначает результат этой <спецификации
запроса> (<query specification>). Если R пуст, то параметру
SQLCODE присваивается значение 100, и никакая строка не вставляется. Число
созданных возможных строк равно мощности R. Вставляемые значения одной
возможной строки являются значениями одной строки R, и значения в одной
строке R являются вставляемыми значениями одной возможной строки.
- Пусть V обозначает строку R или последовательность значений
специфицированных <списком вставляемых значений> (insert value
list>). Тогда i-ое значение V является вставляемым значением объектного
столбца, идентифицируемого i-ым <именем столбца> (<column
name>) в <списке вставляемых столбцов> (<insert column
list>).
- Пусть С обозначает объектный столбец. Пусть v обозначает не
неопределенное вставляемое значение С.
а) Если тип данных С есть тип символьных строк и длина 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>
Синтаксические правила
- Содержащий <модуль> (<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
Синтаксические правила
Нет.
Общие правила
- Любые изменения базы данных, совершенные в текущей транзакции,
аннулируются.
- Любой курсор, открывавшийся в текущей транзакции, закрывается.
- Текущая транзакция завершается.
8.10. <Оператор выборки> (<select statement>)
Функция
Выбирает значения из специфицированной строки таблицы.
Формат
<select statement> ::= SELECT [ALL | DISTINCT] <select name> INTO <select target list> <table expression> <select target list>::= <target specification> [{,<target specification>}...]
Синтаксические правила
- Применимые <привилегии> (<privileges>) для каждого
<имени таблицы> (<table name>) должны включать SELECT.
Замечание: Применимые <привилегии> (<privileges>) для
<имени таблицы> (<table name>) определяются в 6.10,
"<определение привилегий> (<privileges definition>)".
- <Выражение, <вырабатывающее таблицу> (<table
expression>) не должно включать <раздел group by> (<group by
clause>) или <раздел having> <having clause> и не должно
идентифицировать сгруппированное представление.
- Число элементов в <списке выборки> (<select list>)
должно быть таким же, как число элементов в <списке целей выборки>
(<select target list>).
а) Если тип данных цели, указанной 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>) должен быть типом
приблизительных чисел.
- Пусть 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.
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> <object column: positioned> ::= <column name>
Синтаксические правила
- "Применимые <привилегии> (<privileges>)" к
<имени таблицы> (<table name>) должны включать привилегию
UPDATE для каждого <объектного столбца: позиционного> (<object
column: positioned>).
Замечание: "Применимые <привилегии>
(<privileges>)" для <имени таблицы> (<table name>)
определяются в 6.10,
"<определение привилегий> (<privileges
definition>)".
- Содержащий <модуль> (<module>) должен содержать
<объявление курсора> (<declare cursor>) CR с тем же <именем
курсора> (<cursor name>), что и <имя курсора> (<cursor
name>) в <операторе модификации: позиционном> (<update
statement: positioned>).
- Таблица, на которую указывает CR, не должна быть только читаемой.
- Пусть Т обозначает таблицу, идентифицируемую <именем
таблицы> (<table name>). Т должна быть таблицей,
идентифицированной в первом <разделе from> (<from clause>)
<спецификации курсора> (<cursor specification>) CR.
- <Выражение, вырабатывающее значение> (<value
expression>) в <разделе установки: позиционной> (<set clause:
positioned>) не должно включать <спецификацию функции над множеством>
(<set function specification>).
- Каждое <имя столбца> (<column name>),
специфицированное как <объектный столбец: позиционный> (<object
column: positioned>), должно идентифицировать столбец T. Один
<объектный столбец: позиционный> (<object column: positioned>)
не должен появляться более одного раза в <операторе модификации:
позиционном> (<update statement: positioned>).
- Область действия <имени таблицы> (<table name>) -
целиком весь оператор <модификации: позиционный> (<update
statement: positioned>).
- Для каждого <раздела установки: позиционного> (<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) Объектная строка заменяется на возможную строку.
- Если Т- это представляемая таблица, определенная через
<определение представления> (<view definition>) с "WITH
CHECK OPTION", то если <спецификация запроса> (<query
specification>), содержащееся в <определении представления>
(<view definition>), включает <раздел where> (<where
clause>), не содержащийся в <подзапросе> (<subquery>), то
<условие поиска> (<search condition>) этого <раздела
where> (<where clause>) должно быть 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 statement:
searched>)
Функция
Модифицирует строки таблицы.
Формат
<update statement: searched> ::= UPDATE <table name> SET <set clause: searched> [{,<set clause: searched>}...] [WHERE <search conditions>] <set clause: searched> ::= <object column: searched> = NULL <object column: searched> ::= <column name>
Синтаксические правила
- "Применимые <привилегии> (<privileges>)" для
<имени таблицы> (<table name>) должны включать UPDATE для
каждого <имени столбца: поискового> (<object column:
searched>).
Замечание: Применимые <привилегии> (<privileges>) для
<имени таблицы> (<table name>) определяются в 6.10,
"<определение привилегий> (<privileges
definition>)".
- Пусть Т обозначает таблицу, идентифицируемую <именем
таблицы> (<table name>). Т не должна быть только читаемой
таблицей или таблицей, которая идентифицируется в <разделе from>
(<from clause>) любого <подзапроса> (<subquery>),
содержащегося в <условии поиска> (<search condition>).
- <Выражение, вырабатывающее значение> (<value
expression>) в <разделе установки: поисковой> (<set clause:
searched>) не должно включать <спецификацию функции над
множеством> (<set function specification>).
- Каждое <имя столбца> (<column name>),
специфицированное как <объектный столбец: поисковый> (<object
column: searched>), должно идентифицировать столбец T. Один
<объектный столбец: поисковый> (<object column: searched>) не
должен появляться более одного раза в <операторе модификации:
поисковом> (<update statement: searched>).
- Область действия <имени таблицы> (<table name>) -
целиком <оператор модификации: поисковый> (<update statement:
searched>.
- Для каждого <раздела установки: поискового> (<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>) должен быть типом приблизительных
чисел или типом точных чисел.
Общие правила
а) Если не специфицировано <условие поиска> (<search
condition>), то все строки Т являются объектными строками.
b) Если условие поиска специфицировано, то это условие применяется к
каждой строке Т с <именем таблицы> (<table name>), связанным с
этой строкой, и объектными строками являются все строки, для которых
результат <условия поиска> (<search condition>) есть true.
Каждый <подзапрос> (<subquery>) в <условии поиска>
(<search condition>) фактически выполняется для каждой строки T, и
результат используется при применении <условия поиска> (<search
condition>) к данной строке Т. Если какой-либо выполняемый
<подзапрос> (<subquery>) содержит внешнюю ссылку на столец Т,
то она указывает на значение этого столбца в данной строке Т.
Замечание: "Внешняя ссылка" определяется в 5.7,
"<column specification">.
- Каждая объектная строка модифицируется согласно спецификации
каждого <раздела установки: поисковой> (<set clause:
searched>). <Раздел установки: поисковой> (<set clause:
searched>) специфицирует объектный столбец и значение модификации этого
столбца. Объектный столбец - это столбец, идентифицированный <объектным
столбцом: поисковым> (<object column: searched>). Значение
модификации может быть неопределенным значением или значением,
специфицируемым <выражением, вырабатывающим значения> (<value expression>).
Если <выражение, вырабатывающее значение> (<value expression>)
содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого
столбца в объектной строке до модификации любого значения объектной
строки.
- Объектная строка модифицируется по следующим шагам:
а) Создается возможная строка, которая является копией объектной строки.
b) Для каждого <раздела установки: поисковой> (<set clause:
searched>) значение указанного объектного столбца в возможной строке
заменяется на специфицированное значение модификации.
c) Объектная строка заменяется на возможную строку.
- Если Т- это представляемая таблица, определенная через
<определение представления> (<view definition>) с "WITH
CHECK OPTION", то если <спецификация запроса> (<query
specification>), содержащееся в <определении представления>
(<view definition>), включает <раздел where> (<where
clause>), не содержащийся в <подзапросе> (<subquery>), то
<условие поиска> (<search condition>) этого <раздела
where> (<where clause>) должно быть 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.
Уровни
Этот стандарт специфицирует два уровня и отдельные средства поддержания целостности данных.
Средства поддержания целостности данных образуют следующие синтаксические конструкции вместе с Синтаксическими правилами и Общими правилами:
- <Раздел умолчаний> (<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, которое
подчиняется следующим дополнительным правилам.
- 4.16,
"Транзакции":
а) Первое предложение параграфа 1 заменяется следующим:
Транзакция - это последовательность операций, включающая операции над
базой данных, которые являются атомарными по отношению к восстановлению.
b) Параграф 2 удаляется.
c) Второе предложение параграфа 3 удаляется.
- 5.3,
"Лексемы (<token>):
<Идентификатор> (<identifier>) не должен состоять более чем из
12 символов.
- 5.4,
"Имена":
<Имя таблицы> (<table name>) не должно содержать
<идентификатор полномочий> (<authorization identifier>).
- 5.6,
"<Спецификация значения> (<value specification>) и
<спецификация цели> (<target specification>)":
а) <Спецификация значения> (<value specification>) не должна
содержать USER.
b) <Спецификация параметра> (<parameter specification>) не
должна специфицировать <парамететр-индикатор> (<indicator
parameter>).
c) <Спецификация переменной> (<variable specification>) не
должна специфицировать <переменную-индикатор> (<indicator
variable>).
- 5.7,
"<Спецификация столбца> (<column specification>)" :
К синтаксическому правилу 4 добавляется следующее:
- <Спецификация столбца> (<column
specification>) не должна быть внешней ссылкой.
- 5.8,
"<Спецификация функции над множеством> (<set function
specification>)" 5.24,
<Подзапрос> (<subquery>), и 5.25,
<Cпецификация запроса> (<query specification>):
- <Функция надо всеми элементами множества>
(<all set function>), <подзапрос> (<subquery>) и
<спецификация запроса (<query specification>) не должны
содержать ALL.
Замечание: на уровне 1 сохранение дубликатов специфицируется отсутствием
DISTINCT.
- 5.8,
"<Спецификация функций над множеством> (<set function
specification>)":
- <Функция над различными элементами
множества> (<distinct set function>) не должны включать AVG,
MAX, MIN или SUM.
- 5.11,
"<Предикат сравнения> (<comaprison predicate>)" :
<Оператор сравнения> (<comp op>) не должен включать
"<>". Замечание: на уровне 1 сравнение в форме "A
<> B" выражается через эквивалент "NOT A=B".
- 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>".
- 5.17,
"<предикат exists> (<exists predicate>)":
- <Предикат> (<predicate>) не должен
специфицировать <предикат exists> (<exists predicate>).
- 5.22,
"<раздел group by>" (<group by clause>)":
Следующее предложение добавляется к Общему правилу 2:
- Группирование строк, в которых значения одного
или нескольких столбцов группировки являются неопределенными,
определяется в реализации.
- 5.25,
"<Спецификация запроса> (<query specification>)":
Синтаксическое правило 11 заменяется на следующее:
- Распознавание того, является ли <спецификация
запроса> (<query specification>) изменяемой или только читаемой,
определяется в реализации.
- 6.1,
"<Схема> (<schema>)":
<Схема> (<schema>) не должна специфицироваться.
Уровень 1 реализации должен обеспечивать некоторый механизм связи
<идентификатора полномочий> (<authorization identifier>) с
<определением таблицы> (<table definition>), <определением
представления> (<view definition>) или <определением привилегий>
(<privileges definition>).
- 6.2,
"<Определение таблицы> (<table definition>)":
<Определение таблицы> (<table definition>) не должно содержать
<определение огpаничения уникальности> (<unique constraint
definition>). Уровень реализации 1 должен обеспечивать некоторый
механизм спецификации ограничения таблицы, связанного с уникальностью.
- 6.3,
"<Определение столбцов> (<column definition>):
а) <Тип данных> (<data type>) в <определении столбца>
(<column definition>) не должен включать REAL, DOUBLE, PRECISION и
NUMERIC.
b) <Определение столбца> (<column definition>) столбца не
должно специфицировать NOT NULL.
c) <Определение столбца> (<column definition>) столбца не
должно специфицировать UNIQUE.
- 6.9,
"<Определение представления> (<view definition>):
<Определение представления> (<view definition>) не должно
содержать WITH CHECK OPTION.
- 6.10,
"<Определение привилегий> (<privilege definition>)"
:
<Определение привилегий> (<privileges definition>) не должно
содержать WITH GRANT OPTION.
- 7.3,
"<Процедура> (<procedure>):
а) Cинтаксическое правило 8 (a) (2) заменяется на следующее:
Любой <тип данных> (<data type>) в <объявлении
параметра> (<parameter declaration>) должен специфицировать тип
CHARACTER.
b) В общем правиле 3 случай (a) каждое вхождение числа "100"
заменяется на слова "положительное число со значением, определяемым
реализацией"
c) Общее правило 3 (b) (1) заменяется на следующее:
В реализации определяется, аннулируются ли при выполнении S изменения,
произведенные в базе данных.
- 8.3,
"<Объявление курсора> (<declare cursor>)":
а) <Спецификация сортировки> (<sort specification>) не должна
содержать <целых без знака> (<unsigned integer>).
b) <Спецификация сортировки> (<sort specification>) не должна
содержать ASC.
Замечание: на уровне 1 порядок по возрастанию специфицируется
отсутствием опции DESC.
c) <Выражение запроса> (<query expression>) не должно
содержать UNION.
Замечание: на уровне 1 функция объединения не поддерживается.
- 8.7,
"<Оператор вставки> (<insert statement>) :
<Оператор вставки> (<insert statement>) не должен содержать
<спецификацию запроса> (<query specification>).
- 8.11,
"<Оператор модификации: позиционный> (<update statement:
positioned>)" и <оператор удаления: поизиционный>
(<delete statement: positioned>):
<Оператор SQL> (<SQL statement>) не должен специфицировать
<оператор модификации: позиционный> (<update statement:
positioned>) или <оператор удаления: позиционный> (<delete
statement: positioned>).
|