Мир Знаний

Язык модулей SQL (стр. 1 из 4)

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

7.1 <Модуль> (<module>)

Функция

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

Формат

<module> ::=

<module name clause>

<language clause>

<module autorization clause>

[<declare cursor>...]

< procedure > ...

<language clause> ::=

LANGUAGE { COBOL | FORTRAN | PASCAL | PLI }

<module autorization clause> ::=

AUTHORIZATION <module autorization identifier>

<module autorization identifier> ::=

<autorization identifier>

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

  1. Для каждого <определения курсора> (<cursor declare>) в <модуле> (<module>) должна существовать ровно одна <процедура> (<procedure>) в этом <модуле> (<module>), которая содержит <оператор открытия> (<open statement>) со спецификацией <имени курсора> (<cursor name>), объявленного в <объявлении курсора> (<cursor declare>).
  2. <Модуль> (<module>) должен быть ассоциирован с прикладной программой при ее выполнения. Прикладная программа должна быть ассоциирована не более чем с одним <модулем> (<module>).

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

  1. Если <раздел языка> (<language clause>) <модуля> (<module>) специфицирует COBOL (соответственно FORTRAN, PASCAL, PLI) и если агент, выполняющий вызов <процедуры> (<procedure>) этого <модуля> (<module>), не является стандартной программой на языке COBOL (соответственно FORTRAN, Pascal, PL/1), то результат неопределен.
  2. После выполнения агентом на языке программирования последнего вызова <процедуры> (<procedure>) в <модуле> (<module>) неявно выполняется <оператор фиксации> (<commit statement>) или <оператор отката> (<rollback statement>). Выбор одного из этих <операторов SQL> (<SQL statement>) определяется реализацией. Если имеет место невосстанавлваемая ошибка, то СУБД должна выполнить <оператор отката> (<rollback statement>).

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

Функция

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

Формат

<module name clause> ::=

MODULE [<module name>]

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

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

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

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

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

Функция

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

Формат

<procedure> ::=

PROCEDURE <procedure name>

<parameter declaration>...;

<SQL statment>;

<parameter declaration>::=

<parameter name> <data type>

| <SQLCODE parameter>

<SQLCODE parameter> ::=

SQLCODE

<SQL statement> ::=

<close statement>

| <commit statement>

| <delete statement positioned>

| <delete statement searched>

| <fetch statement>

| <insert statement>

| <open statement>

| <rollback statement>

| <select statement>

| <update statement positioned>

| <update statement searched>

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

  1. <Имя процедуры> (<procedure name>) должно отличаться от <имени процедуры> (<procedure name>) любой другой <процедуры> (<procedure>) в содержащем модуле.
  2. <Имя параметра> <parameter name> в каждом <объявлении параметра> (<parameter declaration>) в <процедуре> (<procedure>) должно отличаться от <имени параметра> (<parameter name>) любого другого <объявления параметра> (<parameter declaration>) в этой процедуры.
  3. Любое <имя параметра> (<parameter name>), содержащееся в <операторе SQL> (<SQL statement>) <процедуры> (<procedure>), должно быть специфицировано в <объявлении параметра> (<parameter declaration>) этой процедуры.
  4. Если <имя столбца> (<column name>) в <операторе SQL> (<SQL statement>) совпадает с <именем параметра> (<parameter name>) в <объявлении параметра> (<parameter declaration>) <процедуры> (<procedure>), содержащей этот <оператор SQL> (<SQL statement>), то <спецификация столбца> (<column specification>), которая содержит это <имя столбца> (<column name>), должна содержать <квалификатор> (<qualifier>).
  5. Законный вызов <процедуры> (<procedure>) должен поставлять n параметров, где n - число <объявлений параметров> (<parameter declaration>) в данной <процедуре> (<procedure>).
  6. Процедура должна содержать ровно один <параметр SQLCODE> (<SQLCODE parameter>). На параметр, соответствующий параметру SQLCODE, ссыля4аются я0как я4на параметр SQLCODE.
  7. <Разделом языка> (<language clause>) процедуры явля<раздел языка> (<language clause>) содержащего <модуля> (<module>).
    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".

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

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

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

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

    Функция

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

    Формат

    <close statement>::=

    CLOSE <cursor name>

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

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

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

    1. Курсор должен быть в открытом состоянии.
    2. Курсор переводится в закрытое состояние и разрушается копия <спецификации курсора> (<cursor soecificaton>).

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

    Функция

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

    Формат

    <commit statement>::=

    COMMIT WORK

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

    Нет.

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

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

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

    Функция

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

    Формат

    <declare cursor> ::=

    DECLARE <cursor name> CURSOR

    FOR <cursor specification>

    <cursor specification> ::=

    <query expression> [<order by clause>...]

    <query expression> ::=

    <query term>

    | <query expression> UNION [ALL] <query term>

    <query term> ::=

    <query specification> | (<query expression>)

    <order by clause> ::=

    ORDER BY <sort specification>

    [{,<sort specification>}...]

    <sort specification> ::=

    { <unsigned integer> | <column specification> }

    [ASC | DESC]

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

    1. <Имя курсора> (<cursor name>) не должно быть идентичным любому другому <имени курсора> (<cursor name>), специфицируемого в каком-либо другом <объявлении курсора> (<declare cursor>) того же модуля.
    2. Любое <имя параметра> (<parameter name>), содержащееся в <спецификации курсора> (<cursor specification>), должно быть определено в <объявлении параметра> (<paremeter declaration>) <процедуры> (<procedure>) объемлющего <модуля> (<module>), который содержит <оператор открытия> (<open statement>), специфицирующий это <имя курсора> (<cursor name>).
      Замечание: Cм. Синтаксическое правило 7.1, "<модуль> (<module>)".
    3. Пусть Т обозначает таблицу, специфицированную в <спецификации курсора> (<cursor specification>).
    4. Если указано ORDER BY, то каждая <спецификация сортировки> (<sort specification>) в <разделе order by> (<order by clause>) должна идентифицировать столбец таблицы Т.
      a) Если <спецификация сортировки> (<sort specification>) содержит <спецификацию столбцов> (<column specification>), то <спецификация сортировки> (<sort specification>) идентифицирует столбец Т с именем, указанным в этой <спецификации столбца> (<column specification>).
      b) Если <спецификация сортировки> (<sort specification>) содержит <целое без знака> (<unsigned integer>), то это целое должно быть больше нуля и не более степени таблицы T. <Спецификация сортировки> (<sort specification>) указывает столбец Т с порядковой (ordinal) позицией, специфицируемой этим <целым без знака> (<unsigned integer>).

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

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

        8.4. <Оператор удаления: позиционный> (<delete statement: positioned>)

        Функция

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

        Формат

        <delete statement: positioned> ::=

        DELETE FROM <table name>

        WHERE CURRENT OF <cursor name>

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

        1. Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать DELETE.
          Замечание: "Применимые <привилегии> (<privileges>)" для <имени таблицы> (<table name>) определяются в 6.10, "<Определение привилегий> (<privileges definition>).
        2. Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе удаления: позиционном> (<delete statement: positioned>).
        3. Таблица, на которую указывает CR, не должна быть только читаемой.
        4. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т должна быть таблицей, идентифицируемой в первом <разделе from> (<from clause>) в <спецификации курсора> (<cursor specification>) CR.

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

        1. Курсор CR должен быть установлен на строку.
        2. Строка, из которой получена текущая строка CR, удаляется.

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

        Функция

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

        Формат