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

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

Функция

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

Формат


     <close statement>::=

         CLOSE <cursor name>

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

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

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

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

  5. a) Если не указано UNION, то описанием Т является описание <спецификации запроса> (<query specification>).
    b) Если указано UNION, то пусть для каждого специфицированного UNION Т1 и Т2 обозначают таблицы, которые специфицированы в <выражении запроса> (<query expression>) и <терме запроса> (<query term>). <Список выборки> (<select list>) в спецификациях Т1 и Т2 должен состоять из "*" или <спецификаций столбцов> (<column specification>). Кроме имен столбцов, описания Т1 и Т2 должны быть идентичными. Все столбцы результата неименованы. За исключением <имен столбцов> (<column name>), описание результата такое же, как описание Т1 и Т2.
  6. Если указано 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. a) Если Т изменяемая (updatable) таблица, то курсор ассоциируется с именованной таблицей, идентифицируемой <именем таблицы> (<table name>) из <раздела from> (<from clause>). Пусть В обозначает эту именованную таблицу. Для каждой строки в Т существует соответствующая строка в В, из которой получена строка таблицы Т. Когда курсор установлен на строку таблицы Т, курсор также установлен на соответствующую строку таблицы В.
    b) В противном случае курсор не ассоциируется с именованной таблицей.

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

  3. a) Если не указано ORDER BY, то:
    b) Если ORDER BY указано, то Т обладает порядком сортировки:

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>)

Функция

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

Формат


     <delete statement: searched> ::=

           DELETE FROM <table name>

           WHERE [<search condition>]

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

  1. Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) должны включать DELETE.
    Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)".
  2. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) любого <подзапроса> (<subquery>), содержащегося в <условии поиска> (<search condition>).
  3. Область действия <имени таблицы> (<table name>) - целиком <оператор удаления: поисковый> (<delete statement: searched>.

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


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

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

Функция

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

Формат


     <fetch statement> ::=

          FETCH <cursor name> INTO <fetch target list>

     <fetch target list> ::=

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

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

  1. Содержащий <модуль> (<module>) должен содержать <объявление курсора> (<declare cursor>) CR с тем же <именем курсора> (<cursor name>), что и <имя курсора> (<cursor name>) в <операторе чтения> (<fetch statement>). Пусть Т обозначает таблицу, специфицированную через <спецификации курсора> (<cursor specification>) CR.
  2. Число <спецификаций цели> (<target specification>) в <списке целей чтения> (<fetch target list>) должно быть таким же как степень таблицы Т.

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

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

  1. Курсор CR должен быть в открытом состоянии.
  2. Если таблица, указываемая курсором CR, является пустой, или CR позиционирован на последнюю строку или за ней, то CR устанавливается в позицию после последней строки, параметру SQLCODE присваивается значение 100 и значения не присваиваются целям, идентифицированным в <списке целей чтения> (<fetch target list>).
  3. Если CR установлен в позицию перед строкой, то CR устанавливается на эту строку и значения этой строки присваиваются соответствующим целям.
  4. Если CR установлен на r, где r - это строка, отличная от последней строки, то курсор устанавливается на строку, непосредственно следующую за строкой r, и значения из строки за r присваиваются соответствующим целям.
  5. Присваивание значений целям в <списке целей чтения> (<fetch target list>), кроме параметра 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-той <спецификацией цели> (<target specification>) из <списка целей чтения> (<fetch target list>), соответствует 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.

Назад | Содержание | Вперед