Язык модулей SQL

Язык модулей SQL

7.1 <Модуль> ()

Функция

Определяет модуль.

Формат

::=

[...]

< procedure > ...

::=

LANGUAGE { COBOL | FORTRAN | PASCAL | PLI }

::=

AUTHORIZATION

::=

Синтаксические правила

  1. Для каждого <определения курсора> () в <модуле> () должна существовать ровно одна <процедура> () в этом <модуле> (), которая содержит <оператор открытия> () со спецификацией <имени курсора> (), объявленного в <объявлении курсора> ().

  2. <Модуль> () должен быть ассоциирован с прикладной программой при ее выполнения. Прикладная программа должна быть ассоциирована не более чем с одним <модулем> ().

Общие правила

  1. Если <раздел языка> () <модуля> () специфицирует COBOL (соответственно FORTRAN, PASCAL, PLI) и если агент, выполняющий вызов <процедуры> () этого <модуля> (), не является стандартной программой на языке COBOL (соответственно FORTRAN, Pascal, PL/1), то результат неопределен.

  2. После выполнения агентом на языке программирования последнего вызова <процедуры> () в <модуле> () неявно выполняется <оператор фиксации> () или <оператор отката> (). Выбор одного из этих <операторов SQL> () определяется реализацией. Если имеет место невосстанавлваемая ошибка, то СУБД должна выполнить <оператор отката> ().

7.2. <Раздел имени модуля> ()

Функция

Задает имя <модуля> ().

Формат

::=

MODULE []

Синтаксические правила

  1. <Имя модуля> () должно отличаться от <имени модуля> () любого другого <модуля> () в том же окружении. Понятие окружения определяется в реализации.

Общие правила

  1. <Раздел имени модуля> () определяет необязательный <идентификатор> () как <имя модуля> (), определяющее содержащий <модуль> () в данном окружении.

7.3. <Процедура> ()

Функция

Определяет процедуру и оператор языка SQL.

Формат

::=

PROCEDURE

...;

;

::=

|

::=

SQLCODE

::=

|

|

|

|

|

|

|

|

|

|

Синтаксические правила

  1. <Имя процедуры> () должно отличаться от <имени процедуры> () любой другой <процедуры> () в содержащем модуле.

  2. <Имя параметра> в каждом <объявлении параметра> () в <процедуре> () должно отличаться от <имени параметра> () любого другого <объявления параметра> () в этой процедуры.

  3. Любое <имя параметра> (), содержащееся в <операторе SQL> () <процедуры> (), должно быть специфицировано в <объявлении параметра> () этой процедуры.

  4. Если <имя столбца> () в <операторе SQL> () совпадает с <именем параметра> () в <объявлении параметра> () <процедуры> (), содержащей этот <оператор SQL> (), то <спецификация столбца> (), которая содержит это <имя столбца> (), должна содержать <квалификатор> ().

  5. Законный вызов <процедуры> () должен поставлять n параметров, где n - число <объявлений параметров> () в данной <процедуре> ().

  6. Процедура должна содержать ровно один <параметр SQLCODE> (). На параметр, соответствующий параметру SQLCODE, ссыля4аются я0как я4на параметр SQLCODE.

  7. <Разделом языка> () процедуры явля<раздел языка> () содержащего <модуля> ().


  8. a) Если <раздел языка> () специфицирует COBOL, то:


    • i) Типом параметра SQLCODE должен быть COMPUTATIONAL S9(PC), где PC - определяемая реализацией точность, большая или равная 4.
      ii) Любой <тип данных> () в <объявлении параметров> () должен быть CHARACTER или NUMERIC.
      iii) Если i-ое <объявление параметра> () специфицирует <тип данных> () CHARACTER(L) c некоторой <длиной> () L, то тип i-ого параметра должен быть буквенно-цифровым типом языка COBOL длины L.
      iv) Если i-ое <объявление параметра> () специфицирует <тип данных> () NUMERIC(P,S) c некоторыми <точностью> () P и <масштабом> () S, то типом i-ого параметра должен быть тип языка COBOL usage DISPLAY SIGN LEADING SEPARATE со следующим PICTURE:

      1. Если S=P, то PICTURE: "S", за которым следует "V", и затем P экземпляров "9".

      2. Если P > S > 0, то PICTURE: "S", за которым следуют P-S экземпляров "9", затем "V" и затем S экземпляров "9".

      3. Если 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.

Общие правила

  1. <Процедура> () определяет процедуру, которая может вызываться определяемым реализацией агентом.

  2. Когда процедура вызывается агентом языка программирования:
    а) Если для этого агента нет активной транзакции, то транзакция фактически инициируется и связывается с этим вызовом и с последующими вызовами этим агентом любой <процедуры> () в содержащем <модуле> (), до тех пор, пока данный агент не закончит эту транзакцию.
    b) Выполняется <оператор SQL> () S данной <процедуры> ().


  3. а) Если S выполнен успешно, то


    • i) Если S - <оператор чтения> () , для которого следующая строка не существует, то в параметр SQLCODE устанавливается значение 100.
      ii) Если S - <оператор вставки> (), для которого не нашлось ни одной возможной строки, то в параметр SQLCODE устанавливается значение 100.
      iii) Если S - <оператор выборки> (), результатом которого явилась пустая таблица, то в параметр SQLCODE устанавливается значение 100.
      iv) Если S - <оператор модификации: поисковый> () или <оператор удаления: поисковый>) () с поиском, для которых не нашлись объектные строки для модификации или удаления, то в параметр SQLCODE устанавливается значение 100.
      v) Во всех остальных случаях в параметр SQLCODE устанавливается 0.


b) Если S выполнен неуспешно, то


    • i) Все изменения, произведенные над базой данных при выполнении S, аннулируются.
      ii) В параметр SQLCODE устанавливается отрицательное число со значением, определяемым реализацией

Язык манипулирования данными (data manipulation language)

8.1 <Оператор закрытия> ()

Функция

Закрыть курсор.

Формат

::=

CLOSE

Синтаксические правила

  1. Объемлющий модуль должен содержать объявление курсора, в котором используется это же имя курсора.

Общие правила

  1. Курсор должен быть в открытом состоянии.

  2. Курсор переводится в закрытое состояние и разрушается копия <спецификации курсора> ().

8.2. <Оператор фиксации> ()

Функция

Заканчивает текущую транзакцию с фиксацией.

Формат

::=

COMMIT WORK

Синтаксические правила

Нет.

Общие правила

  1. Текущая транзакция завершается.

  2. Закрываются любые курсоры, открытые данной транзакцией.

  3. Любые изменения базы данных, сделанные в текущей транзакции, фиксируются.

8.3. <Объявление курсора> ()

Функция

Определяет курсор.

Формат

::=

DECLARE CURSOR

FOR

::=

[...]

::=

| UNION [ALL]

::=

| ()

::=

ORDER BY

[{,}...]

::=

{ | }

[ASC | DESC]

Синтаксические правила

  1. <Имя курсора> () не должно быть идентичным любому другому <имени курсора> (), специфицируемого в каком-либо другом <объявлении курсора> () того же модуля.

  2. Любое <имя параметра> (), содержащееся в <спецификации курсора> (), должно быть определено в <объявлении параметра> () <процедуры> () объемлющего <модуля> (), который содержит <оператор открытия> (), специфицирующий это <имя курсора> ().
    Замечание: Cм. Синтаксическое правило 7.1, "<модуль> ()".

  3. Пусть Т обозначает таблицу, специфицированную в <спецификации курсора> ().


  4. a) Если указано ORDER BY, то Т является только читаемой таблицей со специфицированным порядком сортировки.
    b) Если не указаны ни ORDER BY ни UNION и <спецификация запроса> () является из меняемой (updatable), то Т - изменяемая таблица.
    c) Иначе Т - только читаемая таблица.


  5. a) Если не указано UNION, то описанием Т является описание <спецификации запроса> ().
    b) Если указано UNION, то пусть для каждого специфицированного UNION Т1 и Т2 обозначают таблицы, которые специфицированы в <выражении запроса> () и <терме запроса> (). <Список выборки> () в спецификациях Т1 и Т2 должен состоять из "*" или <спецификаций столбцов> (). Кроме имен столбцов, описания Т1 и Т2 должны быть идентичными. Все столбцы результата неименованы. За исключением <имен столбцов> (), описание результата такое же, как описание Т1 и Т2.

  6. Если указано ORDER BY, то каждая <спецификация сортировки> () в <разделе order by> () должна идентифицировать столбец таблицы Т.
    a) Если <спецификация сортировки> () содержит <спецификацию столбцов> (), то <спецификация сортировки> () идентифицирует столбец Т с именем, указанным в этой <спецификации столбца> ().
    b) Если <спецификация сортировки> () содержит <целое без знака> (), то это целое должно быть больше нуля и не более степени таблицы T. <Спецификация сортировки> () указывает столбец Т с порядковой (ordinal) позицией, специфицируемой этим <целым без знака> ().

Общие правила


  1. a) Если Т изменяемая (updatable) таблица, то курсор ассоциируется с именованной таблицей, идентифицируемой <именем таблицы> () из <раздела from> (). Пусть В обозначает эту именованную таблицу. Для каждой строки в Т существует соответствующая строка в В, из которой получена строка таблицы Т. Когда курсор установлен на строку таблицы Т, курсор также установлен на соответствующую строку таблицы В.
    b) В противном случае курсор не ассоциируется с именованной таблицей.


  2. a) Если не указано UNION, то Т - это результат указанной <спецификации запроса> (.
    b) Если UNION указано, то пусть для каждого указанного UNION Т1 и Т2 обозначают результаты <выражения запроса> () и <терма запроса> (). Результат UNION фактически порождается следующим образом: i) Инициализировать результат как пустую таблицу.


    • ii) Занести в результат каждую строку Т1 и каждую строку Т2
      iii) Если не указано ALL , то удалить все излишние дубликаты строк из результата.


  3. a) Если не указано ORDER BY, то:


    • i) Порядок строк в Т определяется реализацией.
      ii) Порядок строк может может быть разным в разных транзакциях.
      iii) Порядок строк Т, устанавливаемый при открытии курсора, будет таким же при следующем открытии курсора в этой же транзакции при условии, что:

      1. Отсутствуют сторонние изменения каких-либо таблиц, указанным в спецификации курсора.

      2. Упорядоченный набор значений параметров, передаваемых в <процедуру> (), содержащую <оператор открытия> (), является одинаковым в обоих случаях.
        Если эти условия не удовлетворяются, то упорядочение строк в Т может различаться при последовательных открытиях курсора в одной транзакции.


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

Синтаксические правила

  1. Применимые <привилегии> () для <имени таблицы> () должны включать DELETE.
    Замечание: "Применимые <привилегии> ()" для <имени таблицы> () определяются в 6.10, "<Определение привилегий> ().

  2. Содержащий <модуль> () должен содержать <объявление курсора> () CR с тем же <именем курсора> (), что и <имя курсора> () в <операторе удаления: позиционном> ().

  3. Таблица, на которую указывает CR, не должна быть только читаемой.

  4. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (). Т должна быть таблицей, идентифицируемой в первом <разделе from> () в <спецификации курсора> () CR.

Общие правила

  1. Курсор CR должен быть установлен на строку.

  2. Строка, из которой получена текущая строка CR, удаляется.

8.5. <Оператор удаления: поисковый> ()

Функция

Удаляет строки таблицы.

Формат

::=

DELETE FROM

WHERE []

Синтаксические правила

  1. Применимые <привилегии> () для <имени таблицы> () должны включать DELETE.
    Замечание: Применимые <привилегии> () для <имени таблицы> () определяются в 6.10, "<определение привилегий> ()".

  2. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> () любого <подзапроса> (), содержащегося в <условии поиска> ().

  3. Область действия <имени таблицы> () - целиком <оператор удаления: поисковый> (.

Общие правила


  1. а) Если не указано <условие поиска> (), то удаляются все строки таблицы Т.
    б) Если указано <условие поиска> (), то условие применяется к каждой строке Т с <именем таблицы> (), связанным с этой строкой, и все строки, для которых результат <условия поиска> () есть true, удаляются. Каждый <подзапрос> () в <условии поиска> () реально выполняется для каждой строки T и результаты используются в применении <условия поиска> () к данной строке Т. Если любой выполняемый <подзапрос> () содержит внешнюю ссылку на столбец Т, то эта ссылка указывает на значение этого столбца в данной строке Т.
    Замечание: "Внешняя ссылка" определяется в 5.7, "<спецификация столбца> ()".

8.6. <Оператор чтения> ()

Функция

Устанавливает курсор на следующую строку таблицы и выбирает значения из этой строки.

Формат

::=

FETCH INTO

::=

[{,}...]

Синтаксические правила

  1. Содержащий <модуль> () должен содержать <объявление курсора> () CR с тем же <именем курсора> (), что и <имя курсора> () в <операторе чтения> (). Пусть Т обозначает таблицу, специфицированную через <спецификации курсора> () CR.

  2. Число <спецификаций цели> () в <списке целей чтения> () должно быть таким же как степень таблицы Т.


  3. а) Если тип данных цели, указанной i-ой <спецификацией цели> () <списка целей чтения> (), является типом символьных строк, то тип данных i-ого столбца таблицы Т должен быть типом символьных строк.
    b) Если тип данных цели, указанной i-ой <спецификацией цели> () <списка целей чтения> (), является типом точных чисел, то тип данных i-ого столбца таблицы Т должен быть типом точных чисел.
    c) Если тип данных цели, указанной i-ой <спецификацией цели> () <списка целей чтения> (), является типом приблизительных чисел, то тип данных i-ого столбца таблицы Т должен быть типом приблизительных чисел или типом точных чисел.

Общие правила

  1. Курсор CR должен быть в открытом состоянии.

  2. Если таблица, указываемая курсором CR, является пустой, или CR позиционирован на последнюю строку или за ней, то CR устанавливается в позицию после последней строки, параметру SQLCODE присваивается значение 100 и значения не присваиваются целям, идентифицированным в <списке целей чтения> ().

  3. Если CR установлен в позицию перед строкой, то CR устанавливается на эту строку и значения этой строки присваиваются соответствующим целям.

  4. Если CR установлен на r, где r - это строка, отличная от последней строки, то курсор устанавливается на строку, непосредственно следующую за строкой r, и значения из строки за r присваиваются соответствующим целям.

  5. Присваивание значений целям в <списке целей чтения> (), кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним.

  6. Если в процессе присваивания значения цели возникает ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации.

  7. Пусть V обозначает цель, а v - соответствующее значение в текущей строке CR.

  8. Если v - это неопределенное значение, то для V должен быть специфицирован индикатор, и этот индикатор устанавливается в -1. Если v - не неопределенное значение, и V обладает индикатором, то:
    a) Если тип данных V есть тип символьных строк длины L и длина M v больше L, то индикатор получает значение M.
    b) Иначе значение индикатора устанавливается в 0.

  9. Цель, идентифицированная i-той <спецификацией цели> () из <списка целей чтения> (), соответствует 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 INTO [()]

{VALUES ()|}

::=

[{,}...]

::=

[{,...]

::=

| NULL

Синтаксические правила

  1. Применимые <привилегии> () к <имени таблицы> () должны включать INSERT.
    Замечание: Применимые <привилегии> () для <имени таблицы> () определяются в 6.10, "<определение привилегий> ()".

  2. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> () <спецификации запроса> () или какого-либо <подзапроса> (), содержащегося в <спецификации запроса> ().

  3. Каждое <имя столбца> () в <списке столбцов вставки> () должно идентифицировать столбец Т, и один и тот же столбец не должен быть идентифицирован более одного раза. Отсутствие <списка столбцов вставки> () является неявной спецификацией <списка столбцов вставки> (), который идентифицирует все столбцы Т в порядке возрастания их порядковых позиций внутри Т.

  4. Столбец, идентифицированный в <списке столбцов вставки> (), является объектным столбцом.


  5. а) Если указывается <список вставляемых значений> (), то число <вставляемых значений> () в этом <списке вставляемых значений> () должно быть равно числу <имен столбцов> () в <списке вставляемых столбцов> (). Пусть i-ый элемент <оператора вставки> () указывает на i-ую <спецификацию значения> () в этом <списке вставляемых значений> ().
    b) Если указывается <спецификация запроса> (), то степень таблицы, специфицированной этой <спецификацией запроса> (), должна быть равна числу <имен столбцов> () в <списке вставляемых столбцов> (). Пусть i-ый элемент <оператора вставки> () указывает на i-ый столбец таблицы, специфицированной <спецификацией запроса> ().

  6. Если i-ый элемент <оператора вставки> () не является неопределенным <значением вставки> (), то:
    а) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (), является типом символьных строк длины L, то тип данных i-ого элемента <оператора вставки> () должен быть типом символьных строк с длиной меньшей или равной L.
    b) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (), является типом точных чисел, то тип данных i-ого элемента <оператора вставки> () должен быть типом точных чисел.
    c) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (), является типом приблизительных чисел, то тип данных i-ого элемента <оператора вставки> () должен быть типом приблизительных чисел или типом точных чисел.

Общие правила

  1. Строка вставляется по следующим шагам:
    а) Фактически создается возможная строка, как это указано в Общих правилах 6.4, "<Раздел умолчания> ()". Если Т - это базовая таблица В, то возможная строка включает каждый столбец В. Если Т - это представляемая таблица, то возможная строка включает каждый столбец базовой таблицы В, из которой порождается Т.
    b) Для каждого объектного столбца в возможной строке его значение заменяется на вставляемое значение.
    c) Возможная строка вставляется в таблицу В.

  2. Если Т - представляемая таблица, определенная через <определение представления> () с "WITH CHECK OPTION", то если <спецификация запроса> (), содержащаяся в <определении представления> (), включает <раздел where> (), не содержащийся в <подзапросе> (), то <условие поиска> () этого <раздела where> () должно быть истинным для возможной строки.

  3. Если указывается <список вставляемых значений> (), то:
    а) Если i-ое <вставляемое значение> () из <списка вставляемых значений> () является <спецификацией значения> (), то значение столбца возможной строки, соответствущего i-ому объектному столбцу, является значением этой <спецификации значения> ().
    b) Если i-ое <вставляемое значение> () из <списка вставляемых значений> () является неопределенным значением, то значение столбца возможной строки, соответствующего i-ому объектному столбцу, является неопределенным значением.

  4. Если указывается <спецификация запроса> (), то пусть R обозначает результат этой <спецификации запроса> (). Если R пуст, то параметру SQLCODE присваивается значение 100, и никакая строка не вставляется. Число созданных возможных строк равно мощности R. Вставляемые значения одной возможной строки являются значениями одной строки R, и значения в одной строке R являются вставляемыми значениями одной возможной строки.

  5. Пусть V обозначает строку R или последовательность значений специфицированных <списком вставляемых значений> (insert value list>). Тогда i-ое значение V является вставляемым значением объектного столбца, идентифицируемого i-ым <именем столбца> () в <списке вставляемых столбцов> ().

  6. Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное вставляемое значение С.


  7. а) Если тип данных С есть тип символьных строк и длина v равна длине С, то значение С устанавливается в v.
    b) Если тип данных С есть тип символьных строк и длина M v меньше L, то первые M символов C устанавливаются в v, и в последние L-M символы C заносится символ пробела.
    c) Если тип данных С есть тип точных чисел, то должно существовать представление значения v в типе данных С такое, чтобы не потерялись никакие первые значащие цифры, и это представление становится значением С.
    d) Если тип данных С есть тип приблизительных чисел, то значением С становится приблизительное значение v.

8.8. <Оператор открытия> ()

Функция

Открывает курсор

Формат

::=

OPEN

Синтаксические правила

  1. Содержащий <модуль> () должен содержать <объявление курсора> () CR с тем же <именем курсора> (), что и <имя курсора> () в <операторе открытия> ().

Общие правила

  1. Курсор CR должен быть в закрытом состоянии.

  2. Пусть S обозначает <спецификацию курсора> ( курсора CR.

  3. Курсор CR переводится в открытое состояние следующими шагами:
    а) Фактически создается копия S, в которой каждая <спецификация цели> () заменяется на значение идентифицируемой цели.
    b) Если S специфицирует только читаемую таблицу, то эта таблица фактически создается в соответствии со спецификацией - копией S.
    c) Курсор CR переводится в открытое состояние и его позиция устанавливается перед первой строкой таблицы.

8.9. <Оператор отката> ()

Функция

Завершает текущую транзакцию с откатом.

Формат

::=

ROLLBACK WORK

Синтаксические правила

Нет.

Общие правила

  1. Любые изменения базы данных, совершенные в текущей транзакции, аннулируются.

  2. Любой курсор, открывавшийся в текущей транзакции, закрывается.

  3. Текущая транзакция завершается.

8.10. <Оператор выборки> ()

Функция

Выбирает значения из специфицированной строки таблицы.

Формат

::=

SELECT [ALL | DISTINCT]

INTO

::=

[{,}...]

Синтаксические правила

  1. Применимые <привилегии> () для каждого <имени таблицы> () должны включать SELECT.
    Замечание: Применимые <привилегии> () для <имени таблицы> () определяются в 6.10, "<определение привилегий> ()".

  2. <Выражение, <вырабатывающее таблицу> () не должно включать <раздел group by> () или <раздел having> и не должно идентифицировать сгруппированное представление.

  3. Число элементов в <списке выборки> () должно быть таким же, как число элементов в <списке целей выборки> ().


  4. а) Если тип данных цели, указанной i-ой <спецификацией цели> () в <списке целей выборки> (), является типом символьных строк, то тип данных i-ого <выражения, вырабатывающего значение> () в <списке выборки> () должен быть типом символьных строк.
    b) Если тип данных цели, указанной i-ой <спецификацией цели> () в <списке целей выборки> (), является типом целых чисел, то тип данных i-ого <выражения, вырабатывающего значение> () в <списке выборки> () должен быть типом точных чисел.
    c) Если тип данных цели, указанной i-ой <спецификацией цели> () в <списке целей выборки> (), является типом приблизительных чисел, то тип данных i-ого <выражения, вырабатывающего значение> () <списке выборки> () должен быть типом приблизительных чисел.

  5. Пусть S обозначает <спецификацию запроса> () с теми же <списком выборки> () и <выражением, вырабатывающим таблицу> (), какие указаны в <операторе выборки> (), и содержащий ALL или DISTINCT, если они присутствуют в <операторе выборки> (). S должна быть допустимой <спецификацией запроса> ().

Общие правила

  1. Пусть R обозначает результат <спецификации запроса> () S.

  2. Мощность R не должна быть больше единицы. Если R пуст, то параметру SQLCODE присваивается значение 100 и и значения не присваиваются целям, идентифицированным в <списке целей выбора> ().

  3. Если R не пуст, то значения строки R присваиваются соответствующим целям.

  4. Присваивание значений целям из <списка целей выборки> (), кроме параметра SQLCODE, осуществляются в порядке, определяемом реализацией. Параметр SQLCODE получает значение последним.

  5. Если в процессе присваивания значений целям фиксируется ошибка, то в параметр SQLCODE устанавливается отрицательное значение, определяемое реализацией, и значения целей, отличных от параметра SQLCODE, зависят от реализации.

  6. Цель, идентифицированная i-той <спецификацией цели> () из <списка целей выборки> (), соответствует i-ому значению в строке R.

  7. Пусть V обозначает идентифицированную цель, а v соответствующее значение в строке R.

  8. Если 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

SET

[{,}...]

WHERE CURRENT OF

::=

=

{ | NULL }

::=

Синтаксические правила

  1. "Применимые <привилегии> ()" к <имени таблицы> () должны включать привилегию UPDATE для каждого <объектного столбца: позиционного> ().
    Замечание: "Применимые <привилегии> ()" для <имени таблицы> () определяются в 6.10, "<определение привилегий> ()".

  2. Содержащий <модуль> () должен содержать <объявление курсора> () CR с тем же <именем курсора> (), что и <имя курсора> () в <операторе модификации: позиционном> ().

  3. Таблица, на которую указывает CR, не должна быть только читаемой.

  4. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (). Т должна быть таблицей, идентифицированной в первом <разделе from> () <спецификации курсора> () CR.

  5. <Выражение, вырабатывающее значение> () в <разделе установки: позиционной> () не должно включать <спецификацию функции над множеством> ().

  6. Каждое <имя столбца> (), специфицированное как <объектный столбец: позиционный> (), должно идентифицировать столбец T. Один <объектный столбец: позиционный> () не должен появляться более одного раза в <операторе модификации: позиционном> ().

  7. Область действия <имени таблицы> () - целиком весь оператор <модификации: позиционный> ().

  8. Для каждого <раздела установки: позиционного> ():
    а) Если специфицировано неопределенное значение, то для столбца, указанного <объектным столбцом: позиционным> (), должно до пускаться неопределенное значение.
    b) Если тип данных столбца, указанного <объектным столбцом: позиционным> (), является типом символьных строк длины L, то тип данных <выражения, вырабатывающего значение> () должен быть типом символьных строк с длиной, меньшей или равной L.
    c) Если тип данных столбца, указанного <объектным столбцом: позиционным> (), является типом точных чисел, то тип данных <выражения, вырабатывающего значение> () должен быть типом точных чисел.
    d) Если тип данных столбца, указанного <объектным столбцом: позиционным> (), является типом приблизительных чисел, то тип данных <выражения, вырабатывающего значение> () должен быть типом приблизительных чисел или типом точных чисел.

Общие правила

  1. Курсор CR должен быть установлен на строку.

  2. Объектная строка является такой строкой, из которой порождена текущая строка CR.

  3. Объектная строка модифицируется согласно спецификации каждого <раздела установки: позиционной> (). <Раздел установки: позиционной> () специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный <объектным столбцом: позиционным> () в <разделе установки: позиционной> (). Значение модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (). Если <выражение, вырабатывающее значение> () содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки.

  4. Объектная строка модифицируется по следующим шагам:
    а) Создается возможная строка, которая является копией объектной строки.
    b) Для каждого <раздела установки: позиционной> () значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации.
    c) Объектная строка заменяется на возможную строку.

  5. Если Т- это представляемая таблица, определенная через <определение представления> () с "WITH CHECK OPTION", то если <спецификация запроса> (), содержащееся в <определении представления> (), включает <раздел where> (), не содержащийся в <подзапросе> (), то <условие поиска> () этого <раздела where> () должно быть 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

SET

[{,}...]

[WHERE ]

::=

=

{ | NULL }

::=

Синтаксические правила

  1. "Применимые <привилегии> ()" для <имени таблицы> () должны включать UPDATE для каждого <имени столбца: поискового> ().
    Замечание: Применимые <привилегии> () для <имени таблицы> () определяются в 6.10, "<определение привилегий> ()".

  2. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> () любого <подзапроса> (), содержащегося в <условии поиска> ().

  3. <Выражение, вырабатывающее значение> () в <разделе установки: поисковой> () не должно включать <спецификацию функции над множеством> ().

  4. Каждое <имя столбца> (), специфицированное как <объектный столбец: поисковый> (), должно идентифицировать столбец T. Один <объектный столбец: поисковый> () не должен появляться более одного раза в <операторе модификации: поисковом> ().

  5. Область действия <имени таблицы> () - целиком <оператор модификации: поисковый> (.

  6. Для каждого <раздела установки: поискового> ():
    а) Если специфицировано неопределенное значение, то для столбца, указанного <объектным столбцом: поисковым> (), должно допускаться неопределенное значение.
    b) Если тип данных столбца, указанного <объектным столбцом: поисковым> (), является типом символьных строк длины L, то тип данных <выражения, вырабатывающего значение> () должен быть типом символьных строк с длиной меньшей или равной L.
    c) Если тип данных столбца, указанного <объектным столбцом: поисковым> (), является типом точных чисел, то тип данных <выражения, вырабатывающего значение> () должен быть типом точных чисел.
    d) Если тип данных столбца, указанного <объектным столбцом: поисковым> (), является типом приблизительных чисел, то тип данных <выражения, вырабатывающего значение> () должен быть типом приблизительных чисел или типом точных чисел.

Общие правила


  1. а) Если не специфицировано <условие поиска> (), то все строки Т являются объектными строками.
    b) Если условие поиска специфицировано, то это условие применяется к каждой строке Т с <именем таблицы> (), связанным с этой строкой, и объектными строками являются все строки, для которых результат <условия поиска> () есть true. Каждый <подзапрос> () в <условии поиска> () фактически выполняется для каждой строки T, и результат используется при применении <условия поиска> () к данной строке Т. Если какой-либо выполняемый <подзапрос> () содержит внешнюю ссылку на столец Т, то она указывает на значение этого столбца в данной строке Т.
    Замечание: "Внешняя ссылка" определяется в 5.7, ".

  2. Каждая объектная строка модифицируется согласно спецификации каждого <раздела установки: поисковой> (). <Раздел установки: поисковой> () специфицирует объектный столбец и значение модификации этого столбца. Объектный столбец - это столбец, идентифицированный <объектным столбцом: поисковым> (). Значение модификации может быть неопределенным значением или значением, специфицируемым <выражением, вырабатывающим значения> (). Если <выражение, вырабатывающее значение> () содержит ссылку к столбцу Т, то эта ссылка указывает на значение этого столбца в объектной строке до модификации любого значения объектной строки.

  3. Объектная строка модифицируется по следующим шагам:
    а) Создается возможная строка, которая является копией объектной строки.
    b) Для каждого <раздела установки: поисковой> () значение указанного объектного столбца в возможной строке заменяется на специфицированное значение модификации.
    c) Объектная строка заменяется на возможную строку.

  4. Если Т- это представляемая таблица, определенная через <определение представления> () с "WITH CHECK OPTION", то если <спецификация запроса> (), содержащееся в <определении представления> (), включает <раздел where> (), не содержащийся в <подзапросе> (), то <условие поиска> () этого <раздела where> () должно быть 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.

Уровни

Этот стандарт специфицирует два уровня и отдельные средства поддержания целостности данных.

Средства поддержания целостности данных образуют следующие синтаксические конструкции вместе с Синтаксическими правилами и Общими правилами:

  1. <Раздел умолчаний> ()

  2. все опции <ограничения на столбец> (), отличные от NOT NULL и NOT NULL UNIQUE

  3. все опции <определения ограничения на таблицу> (), кроме опции UNIQUE <список столбцов уникальности> (UNIQUE ()).

  4. <действие> REFERENCES <список столбцов передачи> ( REFERENCES [ ()])

Уровень 2 - это полный язык базы данных SQL, не включающий средства улучшения целостности данных. Уровень 1 - это подмножество уровня 2, которое подчиняется следующим дополнительным правилам.

  1. 4.16, "Транзакции":
    а) Первое предложение параграфа 1 заменяется следующим:
    Транзакция - это последовательность операций, включающая операции над базой данных, которые являются атомарными по отношению к восстановлению.
    b) Параграф 2 удаляется.
    c) Второе предложение параграфа 3 удаляется.

  2. 5.3, "Лексемы ():
    <Идентификатор> () не должен состоять более чем из 12 символов.

  3. 5.4, "Имена":
    <Имя таблицы> () не должно содержать <идентификатор полномочий> ().

  4. 5.6, "<Спецификация значения> () и <спецификация цели> ()":
    а) <Спецификация значения> () не должна содержать USER.
    b) <Спецификация параметра> () не должна специфицировать <парамететр-индикатор> ().
    c) <Спецификация переменной> () не должна специфицировать <переменную-индикатор> ().

  5. 5.7, "<Спецификация столбца> ()" :
    К синтаксическому правилу 4 добавляется следующее:

    • <Спецификация столбца> () не должна быть внешней ссылкой.

  6. 5.8, "<Спецификация функции над множеством> ()" 5.24, <Подзапрос> (), и 5.25, ():

    • <Функция надо всеми элементами множества> (), <подзапрос> () и <спецификация запроса () не должны содержать ALL.


Замечание: на уровне 1 сохранение дубликатов специфицируется отсутствием DISTINCT.

  1. 5.8, "<Спецификация функций над множеством> ()":

    • <Функция над различными элементами множества> () не должны включать AVG, MAX, MIN или SUM.

  2. 5.11, "<Предикат сравнения> ()" : <Оператор сравнения> () не должен включать "<>". Замечание: на уровне 1 сравнение в форме "A <> B" выражается через эквивалент "NOT A=B".

  3. 5.14, "<предикат like> ():
    а) <Предикат like> () не должен специфицировать ESCAPE <символ escape> ().
    b) <Предикат like> () не должен специфицировать NOT.
    Замечание: на уровне 1 <предикат like> (), содержащий NOT, может быть выражен в эквивалентной форме <условия поиска> (): "NOT ".

  4. 5.17, "<предикат exists> ()":

    • <Предикат> () не должен специфицировать <предикат exists> ().

  5. 5.22, "<раздел group by>" ()":
    Следующее предложение добавляется к Общему правилу 2:

    • Группирование строк, в которых значения одного или нескольких столбцов группировки являются неопределенными, определяется в реализации.

  6. 5.25, "<Спецификация запроса> ()":
    Синтаксическое правило 11 заменяется на следующее:

    • Распознавание того, является ли <спецификация запроса> () изменяемой или только читаемой, определяется в реализации.

  7. 6.1, "<Схема> ()":
    <Схема> () не должна специфицироваться.
    Уровень 1 реализации должен обеспечивать некоторый механизм связи <идентификатора полномочий> () с <определением таблицы> (), <определением представления> () или <определением привилегий> ().

  8. 6.2, "<Определение таблицы> ()":
    <Определение таблицы> () не должно содержать <определение огpаничения уникальности> (). Уровень реализации 1 должен обеспечивать некоторый механизм спецификации ограничения таблицы, связанного с уникальностью.

  9. 6.3, "<Определение столбцов> ():
    а) <Тип данных> () в <определении столбца> () не должен включать REAL, DOUBLE, PRECISION и NUMERIC.
    b) <Определение столбца> () столбца не должно специфицировать NOT NULL.
    c) <Определение столбца> () столбца не должно специфицировать UNIQUE.

  10. 6.9, "<Определение представления> ():
    <Определение представления> () не должно содержать WITH CHECK OPTION.

  11. 6.10, "<Определение привилегий> ()" :
    <Определение привилегий> () не должно содержать WITH GRANT OPTION.

  12. 7.3, "<Процедура> ():
    а) Cинтаксическое правило 8 (a) (2) заменяется на следующее:
    Любой <тип данных> () в <объявлении параметра> () должен специфицировать тип CHARACTER.
    b) В общем правиле 3 случай (a) каждое вхождение числа "100" заменяется на слова "положительное число со значением, определяемым реализацией"
    c) Общее правило 3 (b) (1) заменяется на следующее:
    В реализации определяется, аннулируются ли при выполнении S изменения, произведенные в базе данных.

  13. 8.3, "<Объявление курсора> ()":
    а) <Спецификация сортировки> () не должна содержать <целых без знака> ().
    b) <Спецификация сортировки> () не должна содержать ASC.
    Замечание: на уровне 1 порядок по возрастанию специфицируется отсутствием опции DESC.
    c) <Выражение запроса> () не должно содержать UNION.
    Замечание: на уровне 1 функция объединения не поддерживается.

  14. 8.7, "<Оператор вставки> () :
    <Оператор вставки> () не должен содержать <спецификацию запроса> ().

  15. 8.11, "<Оператор модификации: позиционный> ()" и <оператор удаления: поизиционный> ():
    <Оператор SQL> () не должен специфицировать <оператор модификации: позиционный> () или <оператор удаления: позиционный> ().


Нравится материал? Поддержи автора!

Ещё документы из категории информатика:

X Код для использования на сайте:
Ширина блока px

Скопируйте этот код и вставьте себе на сайт

X

Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.

После чего кнопка «СКАЧАТЬ» станет доступной!

Кнопочки находятся чуть ниже. Спасибо!

Кнопки:

Скачать документ