* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
Очень похожие работы
Язык
модулей SQL
7.1
<Модуль> ()
Функция
Определяет
модуль.
Формат
::=
[...]
<
procedure > ...
::=
LANGUAGE
{ COBOL | FORTRAN | PASCAL | PLI }
::=
AUTHORIZATION
::=
Синтаксические
правила
Для
каждого <определения>
() в <модуле> ()
должна существовать ровно одна
<процедура> () в этом <модуле>
(), которая содержит <оператор
открытия> () со спецификацией
<имени> (),
объявленного в <объявлении>
().
<Модуль>
() должен быть ассоциирован с
прикладной программой при ее выполнения.
Прикладная программа должна быть
ассоциирована не более чем с одним
<модулем> ().
Общие
правила
Если
<раздел> () <модуля>
() специфицирует COBOL (соответственно
FORTRAN, PASCAL, PLI) и если агент, выполняющий
вызов <процедуры> () этого
<модуля> (), не является
стандартной программой на языке COBOL
(соответственно FORTRAN, Pascal, PL/1), то результат
неопределен.
После
выполнения агентом на языке программирования
последнего вызова <процедуры>
() в <модуле> () неявно
выполняется <оператор>
() или <оператор>
(). Выбор одного из этих
<операторов> ()
определяется реализацией. Если имеет
место невосстанавлваемая ошибка, то
СУБД должна выполнить <оператор
отката> ().
7.2.
<Раздел
имени
модуля>
()
Функция
Задает
имя <модуля> ().
Формат
::=
MODULE
[]
Синтаксические
правила
<Имя
модуля> () должно отличаться
от <имени> () любого
другого <модуля> () в том же
окружении. Понятие окружения определяется
в реализации.
Общие
правила
<Раздел
имени модуля> () определяет
необязательный <идентификатор>
() как <имя> (), определяющее содержащий <модуль>
() в данном окружении.
7.3.
<Процедура> ()
Функция
Определяет
процедуру и оператор языка SQL.
Формат
::=
PROCEDURE
...;
;
::=
|
::=
SQLCODE
::=
|
|
|
|
|
|
|
|
|
|
Синтаксические
правила
<Имя
процедуры> () должно
отличаться от <имени>
() любой другой <процедуры>
() в содержащем модуле.
<Имя
параметра> в каждом
<объявлении> () в <процедуре> ()
должно отличаться от <имени>
() любого другого <объявления
параметра> () в этой
процедуры.
Любое
<имя> (),
содержащееся в <операторе> () <процедуры> (),
должно быть специфицировано в <объявлении
параметра> () этой
процедуры.
Если
<имя> () в <операторе
SQL> () совпадает с <именем
параметра> () в <объявлении
параметра> () <процедуры>
(), содержащей этот <оператор
SQL> (), то <спецификация
столбца> (), которая
содержит это <имя> (), должна содержать <квалификатор>
().
Законный
вызов <процедуры> () должен
поставлять n параметров, где n - число
<объявлений> () в данной <процедуре>
().
Процедура
должна содержать ровно один <параметр
SQLCODE> (). На параметр,
соответствующий параметру SQLCODE,
ссыля4аются я0как я4на параметр SQLCODE.
i)
Типом параметра SQLCODE должен быть
COMPUTATIONAL S9(PC), где PC - определяемая
реализацией точность, большая или
равная 4. ii)
Любой <тип> () в
<объявлении> () должен быть CHARACTER или NUMERIC.
iii)
Если i-ое <объявление>
() специфицирует <тип
данных> () CHARACTER(L) c некоторой
<длиной> () L, то тип i-ого
параметра должен быть буквенно-цифровым
типом языка COBOL длины L. iv)
Если i-ое <объявление>
() специфицирует <тип
данных> () NUMERIC(P,S) c некоторыми
<точностью> () P и <масштабом>
() S, то типом i-ого параметра
должен быть тип языка COBOL usage DISPLAY SIGN
LEADING SEPARATE со следующим PICTURE:
Если
S=P, то PICTURE: "S", за которым следует
"V", и затем P экземпляров "9".
Если
P > S > 0, то PICTURE: "S", за которым
следуют P-S экземпляров "9", затем
"V" и затем S экземпляров "9".
Если
S=O, то PICTURE: "S", за которым следуют
P экземпляров "9" и затем
необязательное "V".
b)
Если <раздел> ()
специфицирует FORTRAN, то:
i)
Тип параметра SQLCODE должен быть типом
INTEGER языка FORTRAN. ii)
Любой <тип> () в
<объявлении> должен быть
CHARACTER, INTEGER, REAL или DOUBLE PRECISION. iii)
Если i-ое <объявление>
() специфицирует <тип
данных> () CHARACTER(L) с некоторой
<длиной> () L, то тип i-ого
параметра должен быть типом CHARACTER языка
FORTRAN с длиной L. vi)
Если i-ое <объявление>
() специфицирует <тип
данных> () данных INTEGER, REAL или
DOUBLE PRECISION, то тип i-ого параметра должен
быть соответственно INTEGER, REAL или DOUBLE
PRECISION языка FORTRAN.
c)
Если <раздел> ()
специфицирует PASCAL, то:
i)
Тип параметра SQLCODE должен быть типом
INTEGER языка Pascal. ii)
Любой <тип> () в
<объявлении> () должен быть CHARACTER, INTEGER, или
REAL. iii)
Если i-ое <объявление>
() специфицирует <тип
данных> () CHARACTER(L) с некоторой
<длиной> () L, то тип i-ого
параметра должен быть типом строки
языка Pascal длины L. iv)
Если i-ое <объявление>
() специфицирует <тип
данных> () INTEGER или REAL, то тип
i-ого параметра должен быть соответственно
типом INTEGER, или REAL языка Pascal.
d)
Если <раздел> ()
специфицирует PL1, то:
i)
Тип параметра SQLCODE должен быть FIXED
BINARY(PP), где РР определяемая реализацией
точность, большая или равная 15. ii)
Любой <тип> () в
<объявлении> () должен быть CHARACTER, DECIMAL, или
FLOAT. iii)
Если i-ое <объявление>
() специфицирует тип
данных CHARACTER(L) с некоторой <длиной>
() L, то тип i-ого параметра должен
быть типом CHARACTER языка PL/1 с длиной L.
vi)
Если i-ое <объявление>
() специфицирует тип
данных DECIMAL(P,S) с некоторыми <точностью>
() P и <масштабом> ()
S, то тип i-ого параметра должен быть
типом FIXED REAL DECIMAL(P,S) языка PL/1. v)
Если i-ое <объявление>
() специфицирует тип
данных FLOAT(P) с некоторой <точностью>
() P, то тип i-ого параметра
должнен быть типом FLOAT REAL BINARY (P) языка
PL/1.
Общие
правила
<Процедура>
() определяет процедуру, которая
может вызываться определяемым реализацией
агентом.
Когда
процедура вызывается агентом языка
программирования: а)
Если для этого агента нет активной
транзакции, то транзакция фактически
инициируется и связывается с этим
вызовом и с последующими вызовами этим
агентом любой <процедуры> ()
в содержащем <модуле> (), до
тех пор, пока данный агент не закончит
эту транзакцию. b)
Выполняется <оператор> () S данной <процедуры>
().
а)
Если S выполнен успешно, то
i)
Если S - <оператор> () , для которого следующая строка
не существует, то в параметр SQLCODE
устанавливается значение 100. ii)
Если S - <оператор> (), для которого не нашлось ни
одной возможной строки, то в параметр
SQLCODE устанавливается значение 100. iii)
Если S - <оператор> (
b)
Если S выполнен неуспешно, то
i)
Все изменения, произведенные над базой
данных при выполнении S, аннулируются.
ii)
В параметр SQLCODE устанавливается
отрицательное число со значением,
определяемым реализацией
Язык
манипулирования данными (data manipulation
language)
8.1
<Оператор> ()
Функция
Закрыть
курсор.
Формат
::=
CLOSE
Синтаксические
правила
Объемлющий
модуль должен содержать объявление
курсора, в котором используется это же
имя курсора.
Общие
правила
Курсор
должен быть в открытом состоянии.
Курсор
переводится в закрытое состояние и
разрушается копия <спецификации
курсора> ().
8.2.
<Оператор> ()
Функция
Заканчивает
текущую транзакцию с фиксацией.
Формат
::=
COMMIT
WORK
Синтаксическиеправила
Нет.
Общие
правила
Текущая
транзакция завершается.
Закрываются
любые курсоры, открытые данной
транзакцией.
Любые
изменения базы данных, сделанные в
текущей транзакции, фиксируются.
8.3.
<Объявление> ()
Функция
Определяет
курсор.
Формат
::=
DECLARE
CURSOR
FOR
::=
[...]
::=
|
UNION [ALL]
::=
| ()
::=
ORDER
BY
[{,}...]
::=
{
| }
[ASC
| DESC]
Синтаксические
правила
<Имя
курсора> () не должно быть
идентичным любому другому <имени
курсора> (), специфицируемого
в каком-либо другом <объявлении
курсора> () того же модуля.
Любое
<имя> (),
содержащееся в <спецификации>
(), должно быть определено
в <объявлении> () <процедуры> ()
объемлющего <модуля> (),
который содержит <оператор>
(), специфицирующий это <имя
курсора> (). Замечание:
Cм. Синтаксическое правило 7.1, "<модуль>
()".
Пусть
Т обозначает таблицу, специфицированную
в <спецификации> ().
a)
Если указано ORDER BY, то Т является только
читаемой таблицей со специфицированным
порядком сортировки. b)
Если не указаны ни ORDER BY ни UNION и
<спецификация> () является из меняемой
(updatable), то Т - изменяемая таблица. c)
Иначе Т - только читаемая таблица.
a)
Если не указано UNION, то описанием Т
является описание <спецификации
запроса> (). b)
Если указано UNION, то пусть для каждого
специфицированного UNION Т1 и Т2 обозначают
таблицы, которые специфицированы в
<выражении> ()
и <терме> (). <Список
выборки> (
Если
указано ORDER BY, то каждая <спецификация
сортировки> () в <разделе
order by> () должна идентифицировать
столбец таблицы Т. a)
Если <спецификация>
() содержит <спецификацию
столбцов> (), то
<спецификация> () идентифицирует столбец Т с
именем, указанным в этой <спецификации
столбца> (). b)
Если <спецификация>
() содержит <целое без
знака> (), то это целое
должно быть больше нуля и не более
степени таблицы T. <Спецификация
сортировки> () указывает
столбец Т с порядковой (ordinal) позицией,
специфицируемой этим <целым>
().
Общие
правила
a)
Если Т изменяемая (updatable) таблица, то
курсор ассоциируется с именованной
таблицей, идентифицируемой <именем
таблицы> (
) из <раздела
from> (). Пусть В обозначает
эту именованную таблицу. Для каждой
строки в Т существует соответствующая
строка в В, из которой получена строка
таблицы Т. Когда курсор установлен на
строку таблицы Т, курсор также установлен
на соответствующую строку таблицы В.
b)
В противном случае курсор не ассоциируется
с именованной таблицей.
a)
Если не указано UNION, то Т - это результат
указанной <спецификации>
(. b)
Если UNION указано, то пусть для каждого
указанного UNION Т1 и Т2 обозначают
результаты <выражения>
() и <терма>
(). Результат UNION фактически
порождается следующим образом: i)
Инициализировать результат как пустую
таблицу.
ii)
Занести в результат каждую строку Т1
и каждую строку Т2 iii)
Если не указано ALL , то удалить все
излишние дубликаты строк из результата.
a)
Если не указано ORDER BY, то:
i)
Порядок строк в Т определяется
реализацией. ii)
Порядок строк может может быть разным
в разных транзакциях. iii)
Порядок строк Т, устанавливаемый при
открытии курсора, будет таким же при
следующем открытии курсора в этой же
транзакции при условии, что:
Отсутствуют
сторонние изменения каких-либо таблиц,
указанным в спецификации курсора.
Упорядоченный
набор значений параметров, передаваемых
в <процедуру> (), содержащую
<оператор> (),
является одинаковым в обоих случаях. Если
эти условия не удовлетворяются, то
упорядочение строк в Т может различаться
при последовательных открытиях курсора
в одной транзакции.
b)
Если ORDER BY указано, то Т обладает порядком
сортировки:
i)
Порядок сортировки является
последовательностью групп сортировки.
Группа сортировки - это последовательность
строк, в которых все значения столбцов
сортировки идентичны. Более того,
группа сортировки может быть
последовательностью групп сортировки.
ii)
Мощность последовательности и порядковая
позиция каждой группы сортировки
определяется значениями наиболее
значащих столбцов сортировки. Мощность
последовательности является минимальным
числом групп сортировки таких, что для
каждой группы сортировки с числом
строк больше единицы все значения
столбца сортировки идентичны. iii)
Если порядок сортировки основывается
на дополнительных столбцах сортировки,
то каждая группа сортировки с числом
строк больше единицы является
последовательностью групп сортировки.
Мощность каждой последовательности
и порядковая позиция каждой группы
сортировки внутри каждой последовательности
определяется значениями следующего
наиболее значащего столбца сортировки.
Мощность каждой последовательности
является минимальным числом групп
сортировки таких, что для каждой группы
с числом строк больше единицы все
значения этого столбца сортировки
идентичны. iv)
Предыдущий параграф применяется по
очереди к каждому дополнительному
столбцу сортировки. Если группа
сортировки состоит из нескольких строк
и не является последовательностью
групп сортировки, то порядок строк в
группе сортировки не определен. v)
Пусть С обозначает столбец сортировки
и S - последовательность, которая
определяется значениями С. vi)
Направление сортировки связывается
с каждым столбцом сортировки. Если
направление для С задано по возрастанию,
то первая группа сортировки S содержит
наименьшее значение С и каждая
последующая группа сортировки содержит
значение С большее, чем значение С в
предшествующей группе сортировки.
Если направление для С задано по
убыванию, то первая группа сортировки
S содержит наибольшее значение С и
каждая последующая группа сортировки
содержит значения С меньшее, чем
значение С в предшествующей группе
сортировки. vii)
Упорядоченность определяется правилами
сравнения, указанными в 5.11,
"<Предикат>
(). Порядок неопределенных
значений по отношению к не неопределенным
значениям определяется реализацией,
но должен быть либо строго больше либо
строго меньше всех не неопределенных
значений. viii)
<Спецификация> () специфицирует столбец
сортировки и направление. Столбец
сортировки - это столбец, указываемый
<целым> () или
<спецификацией> (). <Целое> () i ссылается на i-ый столбец Т.
<Спецификация> () указывает именованный
столбец. ix)
Если в <спецификации>
() указано DESC, то направление
сортировки, специфицируемое этой
<спецификацией> (), является направлением по
убыванию. Если указано АSC или не указано
ни ASC, ни DESC, то направление сортировки
для этого столбца сортировки является
направлением по возрастанию. x)
Последовательность <спецификаций
сортировки> () определяет
относительную значимость сортируемых
столбцов. Столбец сортировки, указанный
в первой <спецификации>
(), наиболее значащий и
каждый последующий столбец сортировки
является менее значащим, чем предыдущий
столбец сортировки.
8.4.
<Оператор>
()
Функция
Удаляет
строку таблицы.
Формат
::=
DELETE
FROM
WHERE
CURRENT OF
Синтаксические
правила
Применимые
<привилегии> () для <имени
таблицы> (
) должны включать
DELETE. Замечание:
"Применимые
<привилегии> ()" для
<имени> (
) определяются
в 6.10,
"<Определение>
().
Содержащий
<модуль> () должен содержать
<объявление> ()
CR с тем же <именем> (), что и <имя> () в <операторе>
().
Таблица,
на которую указывает CR, не должна быть
только читаемой.
Пусть
Т обозначает таблицу, идентифицируемую
<именем> (
). Т должна
быть таблицей, идентифицируемой в
первом <разделе> () в
<спецификации> () CR.
Общие
правила
Курсор
CR должен быть установлен на строку.
Строка,
из которой получена текущая строка CR,
удаляется.
8.5.
<Оператор>
()
Функция
Удаляет
строки таблицы.
Формат
::=
DELETE
FROM
WHERE
[]
Синтаксические
правила
Применимые
<привилегии> () для <имени
таблицы> (
) должны включать
DELETE. Замечание:
Применимые <привилегии> ()
для <имени> (
)
определяются в 6.10,
"<определение>
()".
Пусть
Т обозначает таблицу, идентифицируемую
<именем> (
). Т не
должна быть только читаемой таблицей
или таблицей, которая идентифицируется
в <разделе> () любого
<подзапроса> (), содержащегося
в <условии> ().
Область
действия <имени> (
)
- целиком <оператор>
(.
Общие
правила
а)
Если не указано <условие>
(), то удаляются все строки
таблицы Т. б)
Если указано <условие> (), то условие применяется к каждой
строке Т с <именем> (
), связанным с этой строкой, и все
строки, для которых результат <условия
поиска> () есть true,
удаляются. Каждый <подзапрос>
() в <условии> () реально выполняется для каждой
строки T и результаты используются в
применении <условия> () к данной строке Т. Если любой
выполняемый <подзапрос> ()
содержит внешнюю ссылку на столбец Т,
то эта ссылка указывает на значение
этого столбца в данной строке Т.
Замечание:
"Внешняя ссылка" определяется в
5.7,
"<спецификация> ()".
8.6.
<Оператор> ()
Функция
Устанавливает
курсор на следующую строку таблицы и
выбирает значения из этой строки.
Формат
::=
FETCH
INTO
::=
[{,}...]
Синтаксические
правила
Содержащий
<модуль> () должен содержать
<объявление> ()
CR с тем же <именем> (), что и <имя> () в <операторе> (). Пусть Т обозначает таблицу,
специфицированную через <спецификации
курсора> () CR.
Число
<спецификаций> () в <списке>
() должно быть таким же
как степень таблицы Т.
а)
Если тип данных цели, указанной i-ой
<спецификацией> () <списка>
(), является типом
символьных строк, то тип данных i-ого
столбца таблицы Т должен быть типом
символьных строк. b)
Если тип данных цели, указанной i-ой
<спецификацией> () <списка>
(), является типом
точных чисел, то тип данных i-ого столбца
таблицы Т должен быть типом точных
чисел. c)
Если тип данных цели, указанной i-ой
<спецификацией> () <списка>
(), является типом
приблизительных чисел, то тип данных
i-ого столбца таблицы Т должен быть
типом приблизительных чисел или типом
точных чисел.
Общие
правила
Курсор
CR должен быть в открытом состоянии.
Если
таблица, указываемая курсором CR, является
пустой, или CR позиционирован на последнюю
строку или за ней, то CR устанавливается
в позицию после последней строки,
параметру SQLCODE присваивается значение
100 и значения не присваиваются целям,
идентифицированным в <списке целей
чтения> ().
Если
CR установлен в позицию перед строкой,
то CR устанавливается на эту строку и
значения этой строки присваиваются
соответствующим целям.
Если
CR установлен на r, где r - это строка,
отличная от последней строки, то курсор
устанавливается на строку, непосредственно
следующую за строкой r, и значения из
строки за r присваиваются соответствующим
целям.
Присваивание
значений целям в <списке>
(), кроме параметра SQLCODE,
осуществляются в порядке, определяемом
реализацией. Параметр SQLCODE получает
значение последним.
Если
в процессе присваивания значения цели
возникает ошибка, то в параметр SQLCODE
устанавливается отрицательное значение,
определяемое реализацией, и значения
целей, отличных от параметра SQLCODE,
зависят от реализации.
Пусть
V обозначает цель, а v - соответствующее
значение в текущей строке CR.
Если
v - это неопределенное значение, то для
V должен быть специфицирован индикатор,
и этот индикатор устанавливается в -1.
Если v - не неопределенное значение, и
V обладает индикатором, то: a)
Если тип данных V есть тип символьных
строк длины L и длина M v больше L, то
индикатор получает значение M. b)
Иначе значение индикатора устанавливается
в 0.
Цель,
идентифицированная i-той <спецификацией
цели> () из <списка
целей чтения> (),
соответствует i-ому значению из текущей
строки CR.
a)
Если тип данных V есть тип символьных
строк, и длина v равна длине V, то значением
V становится v. b)
Если тип данных V есть тип символьных
строк длины L, и длина v больше L, то
значением V становятся первые L символов
v. c)
Если тип данных V есть тип символьных
строк длины L, и длина M v меньше L, то
значением первых M символов V становится
v, и в последние L-M символов V устанавливаются
символы пробела. d)
Если тип данных V есть тип точных чисел,
то должно существовать представление
значения v в типе данных V такое, чтобы
не потерялись какие-либо первые значащие
цифры, и значением V становится это
представление. e)
Если тип данных V есть тип приблизительных
чисел, то значением V становится
приблизительное значение v.
<Оператор
вставки> ()
Функция
Создает
новые строки в таблице
Формат
::=
INSERT
INTO
[()]
{VALUES
()|}
::=
[{,}...]
::=
[{,...]
::=
| NULL
Синтаксические
правила
Применимые
<привилегии> () к <имени
таблицы> (
) должны включать
INSERT. Замечание:
Применимые <привилегии> ()
для <имени> (
)
определяются в 6.10,
"<определение>
()".
Пусть
Т обозначает таблицу, идентифицируемую
<именем> (
). Т не
должна быть только читаемой таблицей
или таблицей, которая идентифицируется
в <разделе> () <спецификации
запроса> () или какого-либо
<подзапроса> (), содержащегося
в <спецификации> ().
Каждое
<имя> () в <списке
столбцов вставки> ()
должно идентифицировать столбец Т, и
один и тот же столбец не должен быть
идентифицирован более одного раза.
Отсутствие <списка>
() является неявной
спецификацией <списка столбцов
вставки> (), который
идентифицирует все столбцы Т в порядке
возрастания их порядковых позиций
внутри Т.
Столбец,
идентифицированный в <списке столбцов
вставки> (), является
объектным столбцом.
а)
Если указывается <список вставляемых
значений> (), то число
<вставляемых> ()
в этом <списке>
() должно быть равно числу
<имен> () в <списке
вставляемых столбцов> (). Пусть i-ый элемент <оператора
вставки> () указывает на
i-ую <спецификацию> () в этом <списке вставляемых
значений> (). b)
Если указывается <спецификация
запроса> (), то степень
таблицы, специфицированной этой
<спецификацией> (), должна быть равна числу
<имен> () в <списке
вставляемых столбцов> (). Пусть i-ый элемент <оператора
вставки> () указывает на
i-ый столбец таблицы, специфицированной
<спецификацией> ().
Если
i-ый элемент <оператора>
() не является неопределенным
<значением> (),
то: а)
Если тип данных столбца таблицы Т,
указанный i-ым <именем>
(), является типом символьных
строк длины L, то тип данных i-ого элемента
<оператора> ()
должен быть типом символьных строк с
длиной меньшей или равной L. b)
Если тип данных столбца таблицы Т,
указанный i-ым <именем>
(), является типом точных
чисел, то тип данных i-ого элемента
<оператора> ()
должен быть типом точных чисел. c)
Если тип данных столбца таблицы Т,
указанный i-ым <именем>
(), является типом приблизительных
чисел, то тип данных i-ого элемента
<оператора> ()
должен быть типом приблизительных
чисел или типом точных чисел.
Общие
правила
Строка
вставляется по следующим шагам: а)
Фактически создается возможная строка,
как это указано в Общих правилах 6.4,
"<Раздел> ()". Если Т - это базовая таблица
В, то возможная строка включает каждый
столбец В. Если Т - это представляемая
таблица, то возможная строка включает
каждый столбец базовой таблицы В, из
которой порождается Т. b)
Для каждого объектного столбца в
возможной строке его значение заменяется
на вставляемое значение. c)
Возможная строка вставляется в таблицу
В.
Если
Т - представляемая таблица, определенная
через <определение>
() с "WITH CHECK OPTION", то
если <спецификация> (), содержащаяся в <определении
представления> (), включает
<раздел> (), не содержащийся
в <подзапросе> (), то <условие
поиска> () этого <раздела
where> () должно быть истинным
для возможной строки.
Если
указывается <список вставляемых
значений> (), то: а)
Если i-ое <вставляемое>
() из <списка вставляемых
значений> () является
<спецификацией> (), то значение столбца возможной
строки, соответствущего i-ому объектному
столбцу, является значением этой
<спецификации> (). b)
Если i-ое <вставляемое>
() из <списка вставляемых
значений> () является
неопределенным значением, то значение
столбца возможной строки, соответствующего
i-ому объектному столбцу, является
неопределенным значением.
Если
указывается <спецификация>
(), то пусть R обозначает
результат этой <спецификации>
(). Если R пуст, то параметру
SQLCODE присваивается значение 100, и никакая
строка не вставляется. Число созданных
возможных строк равно мощности R.
Вставляемые значения одной возможной
строки являются значениями одной строки
R, и значения в одной строке R являются
вставляемыми значениями одной возможной
строки.
Пусть
V обозначает строку R или последовательность
значений специфицированных <списком
вставляемых значений> (insert value list>).
Тогда i-ое значение V является вставляемым
значением объектного столбца,
идентифицируемого i-ым <именем>
() в <списке вставляемых
столбцов> ().
Пусть
С обозначает объектный столбец. Пусть
v обозначает не неопределенное вставляемое
значение С.
а)
Если тип данных С есть тип символьных
строк и длина v равна длине С, то значение
С устанавливается в v. b)
Если тип данных С есть тип символьных
строк и длина M v меньше L, то первые M
символов C устанавливаются в v, и в
последние L-M символы C заносится символ
пробела. c)
Если тип данных С есть тип точных чисел,
то должно существовать представление
значения v в типе данных С такое, чтобы
не потерялись никакие первые значащие
цифры, и это представление становится
значением С. d)
Если тип данных С есть тип приблизительных
чисел, то значением С становится
приблизительное значение v.
8.8.
<Оператор> ()
Функция
Открывает
курсор
Формат
::=
OPEN
Синтаксические
правила
Содержащий
<модуль> () должен содержать
<объявление> ()
CR с тем же <именем> (), что и <имя> () в <операторе> ().
Общие
правила
Курсор
CR должен быть в закрытом состоянии.
Пусть
S обозначает <спецификацию>
( курсора CR.
Курсор
CR переводится в открытое состояние
следующими шагами: а)
Фактически создается копия S, в которой
каждая <спецификация> () заменяется на значение
идентифицируемой цели. b)
Если S специфицирует только читаемую
таблицу, то эта таблица фактически
создается в соответствии со спецификацией
- копией S. c)
Курсор CR переводится в открытое состояние
и его позиция устанавливается перед
первой строкой таблицы.
8.9.
<Оператор> ()
Функция
Завершает
текущую транзакцию с откатом.
Формат
::=
ROLLBACK
WORK
Синтаксические
правила
Нет.
Общие
правила
Любые
изменения базы данных, совершенные в
текущей транзакции, аннулируются.
Любой
курсор, открывавшийся в текущей
транзакции, закрывается.
Текущая
транзакция завершается.
8.10.
<Оператор> (
Функция
Выбирает
значения из специфицированной строки
таблицы.
Формат
SELECT
[ALL | DISTINCT]
INTO
[{,}...]
Синтаксические
правила
Применимые
<привилегии> () для каждого
<имени> (
) должны
включать SELECT. Замечание:
Применимые <привилегии> ()
для <имени> (
)
определяются в 6.10,
"<определение>
()".
<Выражение,
<вырабатывающее> (
) не должно включать <раздел
group by> () или <раздел
having> и не должно
идентифицировать сгруппированное
представление.
Число
элементов в <списке> (
а)
Если тип данных цели, указанной i-ой
<спецификацией> () в <списке>
(), является типом символьных
строк, то тип данных i-ого <выражения,
вырабатывающего значение> () в <списке> () должен быть типом символьных
строк. b)
Если тип данных цели, указанной i-ой
<спецификацией> () в <списке>
(), является типом целых
чисел, то тип данных i-ого <выражения,
вырабатывающего значение> () в <списке> () должен быть типом точных чисел.
c)
Если тип данных цели, указанной i-ой
<спецификацией> () в <списке>
(), является типом
приблизительных чисел, то тип данных
i-ого <выражения, вырабатывающего
значение> () <списке
выборки> () должен быть типом
приблизительных чисел.
Пусть
S обозначает <спецификацию>
() с теми же <списком
выборки> () и <выражением,
вырабатывающим таблицу> (