Смекни!
smekni.com

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

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

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


    а) Если не указано <условие поиска> (<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>) должно быть таким же как степень таблицы Т.

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

  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.

<Оператор вставки> (<insert statement>)

Функция

Создает новые строки в таблице

Формат

<insert statement> ::=

INSERT INTO <table name> [(<insert column list>)]

{VALUES (<insert value list>)|<query specification>}

<insert column list> ::=

<column name> [{,<column name>}...]

<insert value list> ::=

<insert value> [{,<insert value>...]

<insert value> ::=

<value specification> | NULL

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

  1. Применимые <привилегии> (<privileges>) к <имени таблицы> (<table name>) должны включать INSERT.
    Замечание: Применимые <привилегии> (<privileges>) для <имени таблицы> (<table name>) определяются в 6.10, "<определение привилегий> (<privileges definition>)".
  2. Пусть Т обозначает таблицу, идентифицируемую <именем таблицы> (<table name>). Т не должна быть только читаемой таблицей или таблицей, которая идентифицируется в <разделе from> (<from clause>) <спецификации запроса> (<query specification>) или какого-либо <подзапроса> (<subquery>), содержащегося в <спецификации запроса> (<query specification>).
  3. Каждое <имя столбца> (<column name>) в <списке столбцов вставки> (<insert column list>) должно идентифицировать столбец Т, и один и тот же столбец не должен быть идентифицирован более одного раза. Отсутствие <списка столбцов вставки> (<insert column list>) является неявной спецификацией <списка столбцов вставки> (<insert column list>), который идентифицирует все столбцы Т в порядке возрастания их порядковых позиций внутри Т.
  4. Столбец, идентифицированный в <списке столбцов вставки> (<insert column list>), является объектным столбцом.
  5. Если i-ый элемент <оператора вставки> (<insert statement>) не является неопределенным <значением вставки> (<insert statement>), то:
    а) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (<column name>), является типом символьных строк длины L, то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом символьных строк с длиной меньшей или равной L.
    b) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (<column name>), является типом точных чисел, то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом точных чисел.
    c) Если тип данных столбца таблицы Т, указанный i-ым <именем столбца> (<column name>), является типом приблизительных чисел, то тип данных i-ого элемента <оператора вставки> (<insert statement>) должен быть типом приблизительных чисел или типом точных чисел.

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

  1. Строка вставляется по следующим шагам:
    а) Фактически создается возможная строка, как это указано в Общих правилах 6.4, "<Раздел умолчания> (<default clause>)". Если Т - это базовая таблица В, то возможная строка включает каждый столбец В. Если Т - это представляемая таблица, то возможная строка включает каждый столбец базовой таблицы В, из которой порождается Т.
    b) Для каждого объектного столбца в возможной строке его значение заменяется на вставляемое значение.
    c) Возможная строка вставляется в таблицу В.
  2. Если Т - представляемая таблица, определенная через <определение представления> (<view definition>) с "WITH CHECK OPTION", то если <спецификация запроса> (<query specification>), содержащаяся в <определении представления> (<view definition>), включает <раздел where> (<where clause>), не содержащийся в <подзапросе> (<subquery>), то <условие поиска> (<search condition>) этого <раздела where> (<where clause>) должно быть истинным для возможной строки.
  3. Если указывается <список вставляемых значений> (<insert value list>), то:
    а) Если i-ое <вставляемое значение> (<insert value>) из <списка вставляемых значений> (<insert value list>) является <спецификацией значения> (<value specification>), то значение столбца возможной строки, соответствущего i-ому объектному столбцу, является значением этой <спецификации значения> (<value specification>).
    b) Если i-ое <вставляемое значение> (<insert value>) из <списка вставляемых значений> (<insert value list>) является неопределенным значением, то значение столбца возможной строки, соответствующего i-ому объектному столбцу, является неопределенным значением.
  4. Если указывается <спецификация запроса> (<query specification>), то пусть R обозначает результат этой <спецификации запроса> (<query specification>). Если R пуст, то параметру SQLCODE присваивается значение 100, и никакая строка не вставляется. Число созданных возможных строк равно мощности R. Вставляемые значения одной возможной строки являются значениями одной строки R, и значения в одной строке R являются вставляемыми значениями одной возможной строки.
  5. Пусть V обозначает строку R или последовательность значений специфицированных <списком вставляемых значений> (insert value list>). Тогда i-ое значение V является вставляемым значением объектного столбца, идентифицируемого i-ым <именем столбца> (<column name>) в <списке вставляемых столбцов> (<insert column list>).
  6. Пусть С обозначает объектный столбец. Пусть v обозначает не неопределенное вставляемое значение С.

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

Функция

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

Формат

<open statement> ::=

OPEN <cursor name>

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

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

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

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

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