Вход

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

Реферат по программированию
Дата добавления: 23 января 2002
Язык реферата: Русский
Word, rtf, 485 кб
Реферат можно скачать бесплатно
Скачать





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

7.1 <Модуль> ()

Функция

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

Формат

::=

[...]

< procedure > ...

::=

LANGUAGE { COBOL | FORTRAN | PASCAL | PLI }

::=

AUTHORIZATION

::=

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

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

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

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

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

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

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

Функция

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

Формат

::=

MODULE []

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

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

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

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

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

Функция

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

Формат

::=

PROCEDURE

...;

;

::=

|

::=

SQLCODE

::=

|

|

|

|

|

|

|

| ), результатом которого явилась пустая таблица, то в параметр 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 обозначают таблицы, которые специфицированы в <выражении> () и <терме> (). <Список выборки> ()

    Функция

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

    Формат

    INTO ::=

    [{,}...]

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

    1. Применимые <привилегии> () для каждого <имени> (

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

    2. <Выражение, <вырабатывающее> (

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

    4. Число элементов в <списке> ().


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

    6. Пусть S обозначает <спецификацию> () с теми же <списком выборки> (

    7. ), какие указаны в <операторе выборки> (). S должна быть допустимой <спецификацией запроса> ().

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

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

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

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

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

      SET

      [{,}...]

      WHERE CURRENT OF

      ::=

      =

      { | NULL }

      ::=

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

      1. "Применимые <привилегии> ()" к <имени таблицы> (

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

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

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

    10. Пусть Т обозначает таблицу, идентифицируемую <именем> (

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

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

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

    14. Область действия <имени> (

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

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

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

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

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

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

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

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

    17. SET

      [{,}...]

      [WHERE ]

      ::=

      =

      { | NULL }

      ::=

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

      1. "Применимые <привилегии> ()" для <имени> (

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

    18. Пусть Т обозначает таблицу, идентифицируемую <именем> (

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

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

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

    22. Область действия <имени> (

    23. ) - целиком <оператор модификации: поисковый> (.

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

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


      1. а) Если не специфицировано <условие поиска> (), то все строки Т являются объектными строками.
        b) Если условие поиска специфицировано, то это условие применяется к каждой строке Т с <именем> (

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

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

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

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

    29. Пусть С обозначает объектный столбец. Пусть 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. все опции <определения ограничения на таблицу> (

    30. ), кроме опции UNIQUE <список> (UNIQUE ()).

    31. <действие> REFERENCES <список> ( REFERENCES [ ()])

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

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

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

      3. 5.4, "Имена":
        <Имя таблицы> (

    32. ) не должно содержать <идентификатор> ().

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

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

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

    35. 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, "<предикат> ():
        а) <Предикат> () не должен специфицировать ESCAPE <символ> ().
        b) <Предикат> () не должен специфицировать NOT.
        Замечание: на уровне 1 <предикат> (), содержащий NOT, может быть выражен в эквивалентной форме <условия поиска> (): "NOT ".

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

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

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

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

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

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

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

    36. ), <определением> () или <определением привилегий> ().

    37. 6.2, "<Определение> (

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

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

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

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

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

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

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

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