Замечания по выпуску


38.5 Глава 6. SQL Statements (Операторы SQL)

38.5.1 Теперь поддерживается возможность изменения ключа разделения

Теперь поддерживается изменение ключа разделения. В Главе 6 перечисленные ниже утверждения не касаются случая, когда DB2_UPDATE_PART_KEY=ON:
Прим.:Если DB2_UPDATE_PART_KEY=OFF, эти ограничения остаются в силе.

38.5.1.1 Оператор: ALTER TABLE

Правила

38.5.1.2 Оператор: CREATE TABLE

Правила

38.5.1.3 Оператор: DECLARE GLOBAL TEMPORARY TABLE PARTITIONING KEY (имя-столбца,...)

Прим.:Столбец ключа разделения таблицы не может быть изменен (SQLSTATE 42997).

38.5.1.4 Оператор: UPDATE

Сноски

38.5.2 Длинные ключи индекса для баз данных Unicode

38.5.2.1 ALTER TABLE

Если при определении индекса переменная реестра DB2_INDEX_2BYTEVARLEN имеет значение ON, длина столбцов переменной длины, входящих в этот индекс, включая первичные ключи и ключи уникальности, может быть изменена на значение более 255 байт. Реально длина столбца переменной длины, входящего во внешний ключ, теперь может быть изменена на длину более 255 байт независимо от значения этой переменной реестра. Однако данные длиной более 255 байт можно вставить в таблицу, только если столбец соответствующего первичного ключа имеет длину более 255 байт, что возможно, только если этот первичный ключ создан, когда эта переменная реестра имела значение ON.

38.5.2.2 CREATE INDEX

Индексы могут быть определены на столбцах переменной длины, размер которых больше 255 байт, если переменная реестра DB2_INDEX_2BYTEVARLEN имеет значение ON.

38.5.2.3 CREATE TABLE

Первичные ключи и ключи уникальности, в которые входят столбцы переменной длины, могут иметь размер больше 255, если переменная реестра DB2_INDEX_2BYTEVARLEN имеет значение ON. Внешние ключи могут быть определены на столбцах переменной длины, размер которых больше 255 байт.

38.5.3 ALTER SEQUENCE

ALTER SEQUENCE

Оператор ALTER SEQUENCE изменяет атрибуты последовательности:

Коды возврата

Этот оператор может быть встроен в прикладную программу или выполняться как динамический оператор SQL. Это выполняемый оператор, который можно подготовить динамически. Но если применяется опция связывания DYNAMICRULES BIND, этот оператор нельзя подготовить динамически (SQLSTATE 42509).

Авторизация

Привилегии ID авторизации этого оператора, должны включать, как минимум, одну из следующих привилегий:

Внутреннее представление

>>-ALTER SEQUENCE--имя-последовательности----------------------->
 
      .---------------------------------------------.
      V                                             |
>-------+-RESTART--+---------------------------+-+--+----------><
        |          '-WITH--числовая-константа--' |
        +-INCREMENT BY--числовая-константа-------+
        +-+-MINVALUE--числовая-константа--+------+
        | '-NO MINVALUE-------------------'      |
        +-+-MAXVALUE--числовая-константа--+------+
        | '-NO MAXVALUE-------------------'      |
        +-+-CYCLE----+---------------------------+
        | '-NO CYCLE-'                           |
        +-+-CACHE--целая-константа--+------------+
        | '-NO CACHE----------------'            |
        '-+-ORDER----+---------------------------'
          '-NO ORDER-'
 

Описание

имя-последовательности
Задает конкретную последовательность. Комбинация этого имени и неявно или явно заданного имени схемы должна задавать существующую последовательность на текущем сервере. Если в явно или неявно заданной схеме нет последовательности с таким именем, возникает ошибка (SQLSTATE 42704).

RESTART
Перезапускает последовательность. Если числовая-константа не задана, последовательность перезапускается со значения, заданного неявно или явно в качестве начального значения в операторе CREATE SEQUENCE, которым была создана эта последовательность.

WITH числовая-константа
Перезапускает последовательность с конкретного значения. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820); справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 42894).

INCREMENT BY
Задает интервал между соседними значениями последовательности. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820) и которое не превосходит значения константы large integer (SQLSTATE 42815), и справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA).

Если это отрицательное значение, последовательность значений будет убывающей. Если это положительное значение, последовательность значений будет возрастающей. Если это значение равно 0 или если оно выходит за диапазон, определяемый значениями MINVALUE и MAXVALUE, будет генерироваться одно и то же значение, но последовательность все равно будет считаться возрастающей последовательностью.

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

MINVALUE числовая-константа
Задает числовую константу, определяющую минимальное значение. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820), но справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA) и это значение должно быть меньше или равно максимальному значению (SQLSTATE 42815).

NO MINVALUE
Для возрастающей последовательности минимальное значение будет равно значению START WITH или 1, если значение START WITH не задано. Для убывающей последовательности минимальное значение будет равно минимальному значению типа данных, связанного с этой последовательностью. Эта опция принимается по умолчанию.

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

MAXVALUE числовая-константа
Задает числовую константу, определяющую максимальное значение. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820), но справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA) и это значение должно быть больше или равно минимальному значению (SQLSTATE 42815).

NO MAXVALUE
Для возрастающей последовательности максимальное значение будет равно максимальному значению типа данных, связанного с этой последовательностью. Для убывающей последовательности максимальное значение будет равно значению START WITH или -1, если значение START WITH не задано. Эта опция принимается по умолчанию.

CYCLE или NOCYCLE
Задает, нужно ли продолжать генерировать значения последовательности после достижения максимального или минимального значения последовательности. Граница последовательности может быть достигнута, либо когда следующее значение достигнет в точности граничного условия, либо превзойдет границу; в этом случае следующее значение будет найдено путем возврата к значению START WITH, если циклы разрешены.

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

Если задан параметр CYCLE, для последовательности могут быть сгенерированы повторяющиеся значения.

NO CYCLE
Задает, что после достижения максимального или минимального значения генерация значений будет прекращена. Эта опция принимается по умолчанию.

CACHE или NO CACHE
Задает, нужно ли для ускорения доступа хранить в памяти некоторое число заранее вычисленных значений. Это опция влияет на производительность и настройку.

CACHE целая-константа
Задает максимальное число значений последовательности, которые заранее вычисляются и хранятся в памяти. Предварительное размещение и хранение значение в кэше сокращает синхронный ввод-вывод в журнал при генерации значений последовательности.

При возникновении системной ошибки все хранящиеся в кэше и еще неиспользованные в принятых операторах значения последовательности будут потеряны (то есть вообще не будут использованы). Заданное в опции CACHE значение - это максимальное число значений последовательности, которые могут быть потеряны в случае системной ошибки.

Минимальное значение - 2 (SQLSTATE 42815). Значение по умолчанию - CACHE 20.

NO CACHE
Задает, что значения последовательности не будут вычисляться заранее. Это гарантирует, что никакие значения не будут потеряны в случае системной ошибки, перезагрузки или деактивации базы данных. Если задана эта опция, значения последовательности не хранятся в кэше. В этом случае при каждом запросе нового значения последовательности будет выполняться операция синхронного ввода-вывода в журнал.

NO ORDER или ORDER
Задает, нужно ли генерировать значения последовательности в порядке запросов.

ORDER
Задает, что значения последовательности должны генерироваться в порядке запросов.

NO ORDER
Задает, что значения последовательности не нужно генерировать в порядке запросов. Эта опция принимается по умолчанию.

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

Версия

Примеры

Пример 1: Причиной задания RESTART без числового значения может быть необходимость перезапустить последовательность со значения START WITH. В этом примере целью является генерация чисел с 1 до числа строк в таблице и затем вставка этих чисел в столбец, добавленный в таблицу с помощью временных таблиц. Другой вариант использования - получение результата с перенумерованными строками:

   ALTER SEQUENCE org_seq 
   RESTART
   SELECT NEXTVAL for org_seq, org.* 
      FROM org
 

38.5.4 ALTER TABLE

Изменения во фрагментах синтаксиса:

 
изменение-столбца
 
|--имя-столбца-------------------------------------------------->
 
>-----+-SET--+-DATA TYPE--+-VARCHAR-----------+---(--целое--)--+-------------+>
      |      |            +-CHARACTER VARYING-+                |             |
      |      |            '-CHAR VARYING------'                |             |
      |      '-EXPRESSION AS--(--выражение-генерации--)--------'             |
      +-ADD SCOPE--+-имя-типизированной-таблицы-------------+----------------+
      |            '-имя-типизированной-производной-таблицы-'                |
      '-+-| изменение-идентификации |--------------------------------------+-'
        '-SET GENERATED--+-ALWAYS-----+---+------------------------------+-'
                         '-BY DEFAULT-'   '-| изменение-идентификации |--'
 
>---------------------------------------------------------------|
 
изменение-идентификации
 
|---+-RESTART--+----------------------------+-+-----------------|
    |          '-WITH--числовая-константа---' |
    +-SET INCREMENT BY--числовая-константа----+
    |                    (1)                  |
    +-SET--+-NO MINVALUE-------------------+--+
    |      '-MINVALUE--числовая-константа--'  |
    +-SET--+-NO MAXVALUE-------------------+--+
    |      '-MAXVALUE--числовая-константа--'  |
    +-SET--+-CYCLE----+-----------------------+
    |      '-NO CYCLE-'                       |
    +-SET--+-NO CACHE----------------+--------+
    |      '-CACHE--целая-константа--'        |
    '-SET--+-NO ORDER-+-----------------------'
           '-ORDER----'
 

Примечания:

  1. Эти параметры можно задавать без пробелов: NOMINVALUE, NOMAXVALUE, NOCYCLE, NOCACHE и NOORDER. Все эти версии из одного слова - допустимые альтернативы для версий из двух слов.

Добавьте следующие параметры:

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

ALWAYS
При вставке строки в таблицу для этого столбца всегда будет генерироваться значение. Столбец должен быть уже определен как генерируемый столбец (SQLSTATE 42837).

BY DEFAULT
При вставке строки в таблицу для этого столбца будет генерироваться значение, если значение не задано. Столбец должен быть уже определен как генерируемый столбец (SQLSTATE 42837).

RESTART или RESTART WITH числовая-константа
Перезадает последовательность, связанную со столбцом идентификации. Если не задано условие WITH числовая-константа, последовательность значений для столбца идентификации перезапускается со значения, которое было явно или неявно задано в качестве начального значения при создании этого столбца идентфикации. Числовая-константа - это точная числовая константа, она может принимать любое положительное или отрицательное значение, которое можно присваивать этому столбцу (SQLSTATE 42820); справа от десятичной точки не должно быть ненулевых знаков (SQLSTATE 42894). Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837). Значение числовой-константы будет использовано в качестве следующего значения столбца идентификации.

SET INCREMENT BY числовая-константа
Задает разность между последовательными значениями столбца идентификации. Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837). Это значение - любое положительное или отрицательное значение, которое можно присваивать этому столбцу (SQLSTATE 42820) и которое не превышает значения большой целой константы (SQLSTATE 42815); справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 42894).

Если это отрицательное значение, последовательность значений для этого столбца идентификации будет убывающей. Если это положительное значение, последовательность значений для этого столбца идентификации будет возрастающей. Если это значение равно 0 или если оно выходит за диапазон, определяемый значениями MINVALUE и MAXVALUE, DB2 будет генерировать одно и то же значение, но последовательность все равно будет считаться возрастающей.

SET MINVALUE числовая-константа или NO MINVALUE
Задает минимальное значение, по достижении которого для убывающего столбца идентификации прекращается генерация значений или начинается следующий цикл генерации значений, а для возрастающего столбца идентификации - это значение, с которого начинается следующий цикл генерации после достижения максимального значения. Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837).

MINVALUE числовая-константа
Задает минимальное значение. Оно может быть любым положительным или отрицательным значением, которое можно присваивать этому столбцу (SQLSTATE 42820); справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 42894); это значение должно быть меньше максимального значения (SQLSTATE 42815).

NO MINVALUE
Для возрастающей последовательности минимальное значение будет равно значению START WITH или 1, если значение START WITH не задано. Для убывающей последовательности минимальное значение будет равно минимальному значению типа данных этого столбца.

SET MAXVALUE числовая-константа или NO MAXVALUE
Задает максимальное значение, по достижении которого для возрастающего столбца идентификации прекращается генерация значений или начинается следующий цикл генерации значений; для убывающего столбца идентификации это значение, с которого начинается следующий цикл генерации после достижения минимального значения. Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837).

MAXVALUE числовая-константа
Задает числовую константу, определяющую максимальное значение. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать этому столбцу (SQLSTATE 42820); справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 42894); это значение должно быть больше минимального значения (SQLSTATE 42815).

NO MAXVALUE
Для возрастающей последовательности максимальное значение будет равно максимальному значению типа данных этого столбца. Для убывающей последовательности максимальное значение будет равно значению START WITH или -1, если значение START WITH не задано.

SET CYCLE или NO CYCLE
Задает, нужно ли продолжать генерировать значения столбца идентификации после генерации максимального или минимального значения. Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837).

CYCLE
Задает, что после достижения максимального или минимального значения генерация значений этого столбца должна быть продолжена. Если используется эта опция, для возрастающего столбца идентификации после достижения его максимального значения генерируется его минимальное значение, а для убывающего столбца идентификации после достижения его минимального значения генерируется его максимальное значение. Минимальное и максимальное значения для столбца идентификации определяют диапазон, используемый для циклической генерации значений.

Если задан параметр CYCLE, для столбца идентификации могут быть сгенерированы повторяющиеся значения. Хотя это не обязательное требование, но если нужны уникальные значения, для обеспечения уникальности значений используйте определенный для этого столбца идентификации индекс уникальности с одним столбцом. Если для столбца идентификации существует такой индекс и генерируется неуникальное значение, возникает ошибка (SQLSTATE 23505).

NO CYCLE
Задает, что после достижения максимального или минимального значения генерация значений столбца идентификации будет прекращена.

SET CACHE целая-константа или NO CACHE
Задает, нужно ли для ускорения доступа хранить в памяти некоторое число заранее вычисленных значений. Это опция влияет на производительность и настройку. Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837).

CACHE целая-константа
Задает максимальное число значений последовательности идентификации, которые заранее вычисляются и хранятся в памяти. Если при генерации значений столбца идентификации эти значения вычисляются заранее и хранятся в кэше, это уменьшает затраты на операции синхронного ввода-вывода в журнал.

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

При остановке менеджера баз данных (например, при деактивации базы данных, при возникновении системной ошибки или завершении работы системы) все хранящиеся в кэше и еще неиспользованные в принятых операторах значения последовательности будут потеряны (то есть вообще не будут использованы). Заданное в опции CACHE значение - это максимальное число значений для столбца идентификации, которые могут быть потеряны в случае системной ошибки.

Минимальное значение - 2 (SQLSTATE 42615).

NO CACHE
Задает, что значения для столбца идентификации не будут вычисляться заранее.

Если задана эта опция, значения столбца идентификации не хранятся в кэше. В этом случае при каждом запросе нового значения столбца идентификации будет выполняться операция синхронного ввода-вывода в журнал.

SET ORDER или NO ORDER
Задает, нужно ли генерировать значения столбца идентификации в порядке запросов. Этот столбец должен быть уже определен с атрибутом IDENTITY (SQLSTATE 42837).

ORDER
Задает, что значения столбца идентификации должны генерироваться в порядке запросов.

NO ORDER
Задает, что значения столбца идентификации не нужно генерировать в порядке запросов.

38.5.5 Compound SQL (Embedded) (Составной SQL - встроенный)

В составном операторе SQL ATOMIC не разрешен подготовленный оператор COMMIT.

38.5.6 Составной оператор (динамический)

Составной оператор (динамический)

Составной оператор объединяет вместе другие операторы в один выполняемый блок. Внутри динамически подготовленного составного оператора ATOMIC можно объявлять переменные SQL.

Коды возврата

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

Авторизация

Для запуска динамических составных операторов не требуются привилегии. Однако ID авторизации составного оператора должен иметь привилегии, необходимые для вызова входящих в него операторов SQL.

Внутреннее представление

динамический-составной-оператор
 
>>-+--------------+--   BEGIN ATOMIC---------------------------->
   |        (1)   |
   '-метка:-------'
 
>-----+------------------------------------------------+-------->
      |  .------------------------------------------.  |
      |  V                                          |  |
      '-----+-| объявление-переменной-SQL |-+---;---+--'
            '-| объявление-условия |--------'
 
      .-,----------------------------.
      V                              |
>--------оператор-процедуры-SQL--;---+---END--+--------+-------><
                                              '-метка--'
 
объявление-переменной-SQL
 
               .-,---------------------.
               V                       |
|---DECLARE-------имя-переменной-SQL---+--тип-данных------------>
 
      .-DEFAULT NULL--------------------.
>-----+---------------------------------+-----------------------|
      '-DEFAULT--значения-по-умолчанию--'
 
объявление-условия
 
|---DECLARE--имя-условия--CONDITION--FOR------------------------>
 
                 .-VALUE-.
     .-SQLSTATE--+-------+---.
>----+-----------------------+---строчная-константа-------------|
 

Примечания:

  1. Метка может быть задана, только если этот оператор находится в определении функции, метода или триггера.

Описание

метка
Задает метку для этого блока кода. Если задана метка начала, ее можно использовать в качестве спецификатора для переменных SQL, объявленных в этом динамическом составном операторе; ее можно также использовать в операторе LEAVE. Если задана метка конца, она должна совпадать с меткой начала.

ATOMIC
Ключевое слово ATOMIC указывает, что при возникновении ошибки в этом составном операторе будет выполнен откат для всех выполненных в этом составном операторе операторов SQL, а оставшиеся в этом составном операторе операторы SQL не будут выполняться.

оператор-процедуры-SQL
Внутри динамического составного оператора можно использовать следующие управляющие-операторы-SQL:

Операторы SQL, которые могут быть вызваны:

объявление-переменной-SQL
Объявляет переменную, локальную для этого динамического составного оператора.

имя-переменной-SQL
Задает имя локальной переменной. DB2 преобразует все имена переменных SQL в верхний регистр. Это имя не может:
  • Совпадать с именем другой переменной SQL в том же составном операторе.
  • Совпадать с именем параметра.
  • Совпадать с именем столбца.

Если оператор SQL содержит идентификатор, совпадающий и с именем переменной SQL, и с именем столбца, DB2 интерпретирует этот идентификатор как имя столбца.

тип-данных
Задает тип данных этой переменной.

DEFAULT значения-по-умолчанию или NULL
Задает значение по умолчанию для этой переменной SQL. Переменная инициализируется при вызове этого динамического составного оператора. Если значение по умолчанию не задано, переменная инициализируется значением NULL.

объявление-условия
Объявляет имя условия и соответствующее значение SQLSTATE.

имя-условия
Задает имя условия. Имя условия должно быть уникальным в теле процедуры; на него можно ссылаться только внутри составного оператора, в котором оно определено.

FOR SQLSTATE строчная-константа
Задает SQLSTATE для этого условия. Строчная-константа должна представлять собой пять символов, заключенных в простые кавычки; она не может быть равна '00000'.

Версия

38.5.7 Функция CREATE (источник или шаблон)

Синтаксическая диаграмма изменена на следующую

>>-CREATE FUNCTION--имя-функции--------------------------------->
 
>----(--+------------------------------------------+---)---*---->
        |  .-,----------------------------------.  |
        |  V                                    |  |
        '----+----------------+---тип-данных1---+--'
             '-имя-параметра--'
 
>----RETURNS--тип-данных2---*----+-----------------------+--*--->
                                 '-SPECIFIC--особое-имя--'
 
>-----+-SOURCE--+-имя-функции---------------------------------+-------------------+>
      |         +-SPECIFIC--особое-имя------------------------+                   |
      |         '-имя-функции--(--+--------------------+---)--'                   |
      |                           |  .-,------------.  |                          |
      |                           |  V              |  |                          |
      |                           '----тип-данных---+--'                          |
      |                   .-NOT DETERMINISTIC--.       .-EXTERNAL ACTION----.     |
      '-AS TEMPLATE--*----+--------------------+--*----+--------------------+--*--'
                          '-DETERMINISTIC------'       '-NO EXTERNAL ACTION-'
 
>----*---------------------------------------------------------><
 

Добавьте следующий текст в раздел "Description" (Описание):

DETERMINISTIC  или NOT DETERMINISTIC
Это необязательное условие указывает, будет ли функция всегда возвращать одинаковый результат для данных значений аргументов (DETERMINISTIC) или же на результат функции влияют какие-то значения состояния (NOT DETERMINISTIC). Функция типа DETERMINISTIC при последовательных вызовах ее с одними и теми же входными данными должна всегда возвращать одну и ту же таблицу. Если задано условие NOT DETERMINISTIC, не будут выполняться оптимизации, использующие преимущества того, что для одинаковых входных данных всегда получается один и тот же результат.

Условие NOT DETERMINISTIC должно быть задано (явно или неявно), если функция обращается к специальному регистру или вызывает другую недетерминированную функцию (SQLSTATE 428C2).

NO EXTERNAL ACTION  или  EXTERNAL ACTION
Это необязательное условие указывает, выполняет ли эта функция действия, изменяющие состояние объектов, которыми не управляет менеджер баз данных. Если задано условие NO EXTERNAL ACTION, система может использовать определенные оптимизации, исходя из того, что эта функция не влияет на внешние объекты.

Условие EXTERNAL ACTION должно быть задано (явно или неявно), если функция вызывает другую функцию с внешним действием (SQLSTATE 428C2).

38.5.8 Функция CREATE (скалярная SQL, табличная или строчная)

Синтаксическая диаграмма заменена на следующую:

>>-CREATE FUNCTION--имя-функции--------------------------------->
 
>----(--+------------------------------------+---)---*---------->
        |  .-,----------------------------.  |
        |  V                              |  |
        '----имя-параметра--тип-данных1---+--'
 
>----RETURNS--+-тип-данных2-----------------------+--*---------->
              '--+-ROW---+---| список-столбцов |--'
                 '-TABLE-'
 
                                      .-LANGUAGE SQL--.
>-----+-----------------------+--*----+---------------+--*------>
      '-SPECIFIC--особое-имя--'
 
      .-NOT DETERMINISTIC--.       .-EXTERNAL ACTION----.
>-----+--------------------+--*----+--------------------+--*---->
      '-DETERMINISTIC------'       '-NO EXTERNAL ACTION-'
 
      .-READS SQL DATA--.       .-STATIC DISPATCH--.
>-----+-----------------+--*----+------------------+--*--------->
      '-CONTAINS SQL----'
 
                              (1)
      .-CALLED ON NULL INPUT-------.
>-----+----------------------------+--*------------------------->
 
>-----+----------------------------------------------------+---->
      |                                              (2)   |
      '-PREDICATES--(--| спецификация-предиката |--)-------'
 
>----| тело-функции-SQL |--------------------------------------><
 
список-столбцов
 
       .-,---------------------------.
       V                             |
|---(-----имя-столбца--тип-данных3---+---)----------------------|
 
тело-функции-SQL
 
|---+-оператор RETURN-----------------+-------------------------|
    '-динамический-составной-оператор-'
 

Примечания:

  1. Вместо условия CALLED ON NULL INPUT можно задать NULL CALL

  2. Допустимо, только если в RETURNS задан скалярный результат (тип-данных2)

Измените следующие параметры:

LANGUAGE SQL
Указывает, что функция написана на языке SQL.

Этот блок параметров заменяет блок параметров "RETURN expression, NULL, WITH common-table-expression, fullselect".

тело-функции-SQL
Задает тело функции. В теле-функции-SQL можно использовать имена параметров. Чтобы избежать неоднозначности, можно добавить к именам параметров в качестве спецификатора имя функции.

Если тело-функции-SQL представляет собой динамический составной оператор, оно должно содержать по крайней мере один оператор RETURN, который должен быть выполнен при вызове функции (SQLSTATE 42632). Если это табличная функция или строчная функция, она может содержать только один оператор RETURN, который должен быть последним оператором динамического составного оператора (SQLSTATE 429BD).

Дополнительную информацию смотрите в разделах Составной оператор (динамический) и RETURN.

38.5.9 CREATE METHOD

Синтаксическая диаграмма заменена на следующую:

CREATE METHOD

Внутреннее представление

>>-CREATE------------------------------------------------------->
 
>-----+-METHOD--+-имя-метода-----------+---FOR--имя-типа--+----->
      |         '-| сигнатура-метода |-'                  |
      '-SPECIFIC METHOD--особое-имя-----------------------'
 
>-----+-*----EXTERNAL--+--------------------------+--*----+------------------------------+--*--+>
      |                '-NAME--+-'строка'------+--'       '-TRANSFORM GROUP--имя-группы--'     |
      |                        '-идентификатор-'                                               |
      '-| тело-метода-SQL |--------------------------------------------------------------------'
 
>--------------------------------------------------------------><
 
сигнатура-метода
 
|---имя-метода--(--+---------------------------------------------------------+---)-->
                   |  .-,--------------------------------------------------. |
                   |  V                                                    | |
                   '----+----------------+---тип-данных1--+-------------+--+-'
                        '-имя-параметра--'                '-AS LOCATOR--'
 
>----+--------------------------------------------------------------------+->
     '-RETURNS--+-тип-данных2--+-------------+-------------------------+--'
                |              '-AS LOCATOR--'                         |
                '-тип-данных3--CAST FROM--тип-данных4--+-------------+-'
                                                       '-AS LOCATOR--'
 
>---------------------------------------------------------------|
 
тело-метода-SQL
 
|---+-оператор RETURN-----------------+-------------------------|
    '-динамический-составной-оператор-'
 

Раздел "RETURN scalar-expression or NULL" заменен на следующий:

тело-метода-SQL
Тело-метода-SQL определяет, как реализован метод, если в CREATE TYPE для него задано LANGUAGE SQL.

Тело-метода-SQL должно соответствовать следующим частям объявления метода:

В теле-метода-SQL можно использовать имена параметров. Объект метода передается реализации метода как неявный первый параметр с именем SELF.

Дополнительную информацию смотрите в разделах Составной оператор (динамический) и RETURN.

38.5.10 CREATE SEQUENCE

CREATE SEQUENCE

Оператор CREATE SEQUENCE создает последовательность на сервере прикладных программ.

Коды возврата

Этот оператор может быть встроен в прикладную программу или выполняться как динамический оператор SQL. Это выполняемый оператор, который можно подготовить динамически. Но если применяется опция связывания DYNAMICRULES BIND, этот оператор нельзя подготовить динамически (SQLSTATE 42509).

Авторизация

Привилегии ID авторизации этого оператора, должны содержать, как минимум, одну из следующих привилегий:

Внутреннее представление

>>-CREATE SEQUENCE--имя-последовательности---*------------------>
 
      .-AS INTEGER------.
>-----+-----------------+--*------------------------------------>
      '-AS--тип-данных--'
 
>-----+---------------------------------+--*-------------------->
      '-START WITH--числовая-константа--'
 
      .-INCREMENT BY 1--------------------.
>-----+-----------------------------------+--*------------------>
      '-INCREMENT BY--числовая-константа--'
 
                    (1)
      .-NO MINVALUE-------------------.
>-----+-------------------------------+--*---------------------->
      '-MINVALUE--числовая-константа--'
 
      .-NO MAXVALUE-------------------.       .-NO CYCLE--.
>-----+-------------------------------+--*----+-----------+--*-->
      '-MAXVALUE--числовая-константа--'       '-CYCLE-----'
 
      .-CACHE 20----------------.       .-NO ORDER--.
>-----+-------------------------+--*----+-----------+--*-------><
      +-CACHE--целая-константа--+       '-ORDER-----'
      '-NO CACHE----------------'
 

Примечания:

  1. Эти параметры можно задавать без пробелов: NOMINVALUE, NOMAXVALUE, NOCYCLE, NOCACHE и NOORDER. Все эти версии из одного слова - допустимые альтернативы для версий из двух слов.

Описание

имя-последовательности
Имя последовательности. Сочетание имени и неявно или явно заданного имени схемы не должно указывать на существующую последовательность на текущем сервере (SQLSTATE 42710).

Имя-последовательности без спецификатора - это идентификатор SQL. Имя со спецификатором - это спецификатор, после которого идут точка и идентификатор SQL. Спецификатор - это имя схемы.

Если для имени последовательности явно задано имя схемы, это имя схемы не может начинаться с 'SYS'; в противном случае возникает ошибка (SQLSTATE 42939).

AS тип-данных
Задает тип данных, который должен использоваться для значения последовательности. Этот тип данных может быть любым точным числовым типом (SMALLINT, INTEGER, BIGINT или DECIMAL) с масштабом 0 или пользовательским особым типом, исходным типом которого является точный числовой тип с масштабом 0 (SQLSTATE 42815). Тип по умолчанию - INTEGER.

START WITH числовая-константа
Задает первое значение для этой последовательности. Оно может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820); справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA). Значение по умолчанию - MINVALUE для возрастающих последовательностей и MAXVALUE для убывающих последовательностей.

При достижении последовательностью ее максимального или минимального циклическая генерация не обязательно будет продолжена с этого начального значения. Условие START WITH может использоваться для запуска последовательности со значения, выходящего за границы цикла генерации. Диапазон циклической генерации определяется значениями MINVALUE и MAXVALUE.

INCREMENT BY числовая-константа
Задает интервал между соседними значениями последовательности. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820) и которое не превосходит значения константы large integer (SQLSTATE 42815), и справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA).

Если это отрицательное значение, последовательность значений будет убывающей. Если это положительное значение, последовательность значений будет возрастающей. Если это значение равно 0 или если оно выходит за диапазон, определяемый значениями MINVALUE и MAXVALUE, будет генерироваться одно и то же значение, но последовательность все равно будет считаться возрастающей последовательностью. Значение по умолчанию - 1.

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

MINVALUE числовая-константа
Задает числовую константу, определяющую минимальное значение. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820), но справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA) и это значение должно быть меньше или равно максимальному значению (SQLSTATE 42815).

NO MINVALUE
Для возрастающей последовательности минимальное значение будет равно значению START WITH или 1, если значение START WITH не задано. Для убывающей последовательности минимальное значение будет равно минимальному значению типа данных, связанного с этой последовательностью. Эта опция принимается по умолчанию.

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

MAXVALUE числовая-константа
Задает числовую константу, определяющую максимальное значение. Это значение может быть любым положительным или отрицательным значением, которое можно присваивать столбцу типа данных, связанного с этой последовательностью (SQLSTATE 42820), но справа от разделителя целой и дробной части не должно быть ненулевых знаков (SQLSTATE 428FA) и это значение должно быть больше или равно минимальному значению (SQLSTATE 42815).

NO MAXVALUE
Для возрастающей последовательности максимальное значение будет равно максимальному значению типа данных, связанного с этой последовательностью. Для убывающей последовательности максимальное значение будет равно значению START WITH или -1, если значение START WITH не задано. Эта опция принимается по умолчанию.

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

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

Если задан параметр CYCLE, для последовательности могут быть сгенерированы повторяющиеся значения.

NO CYCLE
Задает, что после достижения максимального или минимального значения генерация значений будет прекращена. Эта опция принимается по умолчанию.

CACHE или NO CACHE
Задает, нужно ли для ускорения доступа хранить в памяти некоторое число заранее вычисленных значений. Это опция влияет на производительность и настройку.

CACHE целая-константа
Задает максимальное число значений последовательности, которые заранее вычисляются и хранятся в памяти. Предварительное размещение и хранение значение в кэше сокращает синхронный ввод-вывод в журнал при генерации значений последовательности.

При возникновении системной ошибки все хранящиеся в кэше и еще неиспользованные в принятых операторах значения последовательности будут потеряны (то есть вообще не будут использованы). Заданное в опции CACHE значение - это максимальное число значений последовательности, которые могут быть потеряны в случае системной ошибки.

Минимальное значение - 2 (SQLSTATE 42815). Значение по умолчанию - CACHE 20.

NO CACHE
Задает, что значения последовательности не будут вычисляться заранее. Это гарантирует, что никакие значения не будут потеряны в случае системной ошибки, перезагрузки или деактивации базы данных. Если задана эта опция, значения последовательности не хранятся в кэше. В этом случае при каждом запросе нового значения последовательности будет выполняться операция синхронного ввода-вывода в журнал.

NO ORDER или ORDER
Задает, нужно ли генерировать значения последовательности в порядке запросов.

ORDER
Задает, что значения последовательности должны генерироваться в порядке запросов.

NO ORDER
Задает, что значения последовательности не нужно генерировать в порядке запросов. Эта опция принимается по умолчанию.

Версия

Примеры

Пример 1: Создать последовательность с именем org_seq:

   CREATE SEQUENCE org_seq 
   START WITH 1
   INCREMENT BY 1
      NO MAXVALUE 
      NO CYCLE 
      CACHE 24

38.5.11 CREATE TRIGGER

CREATE TRIGGER

Внутреннее представление

>>-CREATE TRIGGER--имя-триггера----+-NO CASCADE BEFORE-+-------->
                                   '-AFTER-------------'
 
>-----+-INSERT-----------------------------+--ON--имя-таблицы--->
      +-DELETE-----------------------------+
      '-UPDATE--+------------------------+-'
                |    .-,--------------.  |
                |    V                |  |
                '-OF----имя-столбца---+--'
 
>-----+---------------------------------------------------------------------------+>
      |              .---------------------------------------------------------.  |
      |              V   (1)    (2)          .-AS-.                            |  |
      '-REFERENCING-------------------+-OLD--+----+--внутриоператорное-имя--+--+--'
                                      |     .-AS-.                          |
                                      +-NEW-+----+--внутриоператорное-имя---+
                                      |           .-AS-.                    |
                                      +-OLD_TABLE-+----+--идентификатор-----+
                                      |           .-AS-.                    |
                                      '-NEW_TABLE-+----+--идентификатор-----'
 
>-----+-FOR EACH ROW---------------+--  MODE DB2SQL------------->
      |  (3)                       |
      '--------FOR EACH STATEMENT--'
 
>-----| действие-триггера |------------------------------------><
 
действие-триггера
 
|--+------------------------------+--оператор-процедуры-SQL-----|
   '-WHEN--(--критерий-поиска--)--'
 

Примечания:

  1. Каждое из условий OLD и NEW можно задавать только один раз.

  2. Каждое из условий OLD_TABLE и NEW_TABLE можно задавать только один раз и только для триггеров AFTER.

  3. Условие FOR EACH STATEMENT нельзя задавать для триггеров BEFORE.

Описание "triggered-action" ("действия-триггера") замените на следующее:

действие-триггера
Задает действие, выполняемое при активации триггера. Это действие состоит из оператора-процедуры-SQL и необязательного условия для выполнения этого оператора.

WHEN (критерий-поиска)
Задает критерий, который может принимать значения true, false или unknown. критерий-поиска позволяет определить, нужно ли выполнять действие триггера в конкретном случае.

Действие триггера выполняется только в том случае, когда заданный критерий поиска имеет значение true. Если условие WHEN не задано, связанный с ним оператор-процедуры-SQL будет выполняться во всех случаях.

оператор-процедуры-SQL
Оператор-процедуры-SQL может содержать динамический составной оператор или любой из управляющих операторов SQL, перечисленных в разделе Составной оператор (динамический).

Если это триггер BEFORE, оператор-процедуры-SQL может также содержать полную выборку или оператор SET переменная (SQLSTATE 42987).

Если это триггер AFTER, оператор-процедуры-SQL может также содержать один из следующих операторов (SQLSTATE 42987):

В операторе-процедуры-SQL нельзя использовать неопределенные переходные переменные (SQLSTATE 42703) или объявленные временные таблицы (SQLSTATE 42995).

В операторе-процедуры-SQL триггера BEFORE нельзя использовать таблицу сводки, определенную с условием REFRESH IMMEDIATE (SQLSTATE 42997).

В операторе-процедуры-SQL триггера BEFORE нельзя использовать генерируемые столбцы (кроме столбца идентификации) в новой переходной переменной (SQLSTATE 42989).

Раздел Notes (Примечания) изменен следующим образом:

38.5.12 CREATE WRAPPER

В Linux используются библиотеки LIBDRDA.SO и LIBSQLNET.SO, а не LIBDRDA.A и LIBSQLNET.A.

38.5.13 DECLARE CURSOR

В операторе "DECLARE CURSOR" ближе к концу раздела Примечания предложение:

An ambiguous cursor is considered read-only if the BLOCKING bind option is ALL, otherwise it is considered deletable.

надо заменить на:

Неоднозначный указатель считается неизменяемым, если опция связывания BLOCKING=ALL; в противном случае он может быть изменен.

Изменение состоит в замене слова "deletable" (может быть удален) на "updatable" (может быть изменен).

38.5.14 DELETE

Синтаксическая диаграмма оператора DELETE с поиском изменена на следующую:

>>-DELETE FROM----+-имя-таблицы-------------------------------+->
                  +-имя-производной-таблицы-------------------+
                  '-ONLY--(--+-имя-таблицы-------------+---)--'
                             '-имя-производной-таблицы-'
 
>-----+--------------------------------+------------------------>
      | .-AS-.                         |
      '-+----+--внутриоператорное-имя--'
 
>-----+-------------------------+---+---------------+----------><
      '-WHERE--критерий-поиска--'   '-WITH--+-RR-+--'
                                            +-RS-+
                                            +-CS-+
                                            '-UR-'
 

DELETE с указанием позиции:

>>-DELETE FROM----+-имя-таблицы-------------------------------+->
                  +-имя-производной-таблицы-------------------+
                  '-ONLY--(--+-имя-таблицы-------------+---)--'
                             '-имя-производной-таблицы-'
 
>----WHERE CURRENT OF--имя-указателя---------------------------><
 

Добавьте следующий текст в раздел описания:

WITH
Задает уровень изоляции, используемый при поиске удаляемых строк.

RR
Многократное чтение

RS
Стабильность чтения

CS
Стабильность на уровне указателя

UR
Чтение непринятого

По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в котором связан этот оператор.

38.5.15 DROP

Добавьте следующую опцию:

>>-SEQUENCE--имя-последовательности--RESTRICT------------------><
 

Добавьте следующие параметры:

SEQUENCE имя-последовательности RESTRICT

Указывает конкретную последовательность, которую нужно отбросить. Имя-последовательности вместе с неявно или явно заданным именем схемы должно задавать существующую последовательность на текущем сервере. Если в явно или неявно заданной схеме нет последовательности с таким именем, возникает ошибка (SQLSTATE 42704).

Ключевое слово RESTRICT запрещает отбрасывать последовательность, если она используется в определении какого-либо столбца таблицы (для столбца IDENTITY).

Прим.:
  • Созданные системой последовательности для столбцов IDENTITY нельзя отбросить с помощью команды DROP последовательность.
  • При отбрасывании последовательности отбрасываются также все привилегии для этой последовательности.

Таблицу, в которой показаны зависимости объектов друг от друга (Таблица 27), нужно изменить так:

Новая строка: DROP SEQUENCE. Элемент таблицы на пересечении этой новой строки "DROP SEQUENCE" и столбца "PACKAGE" будет содержать "A". Остальные элементы в этой новой строке будут содержать "-".

38.5.16 GRANT (привилегии для последовательности)

GRANT (привилегии для последовательности)

Эта форма оператора GRANT предоставляет привилегии для пользовательской последовательности.

Коды возврата

Этот оператор может быть встроен в прикладную программу или выполняться как динамический оператор SQL. Это выполняемый оператор, который можно подготовить динамически. Но если применяется опция связывания DYNAMICRULES BIND, этот оператор нельзя подготовить динамически (SQLSTATE 42509).

Авторизация

Привилегии ID авторизации этого оператора, должны включать, как минимум, одну из следующих привилегий:

Внутреннее представление

>>-GRANT--USAGE--ON SEQUENCE--имя-последовательности--TO PUBLIC-->
 
>--------------------------------------------------------------><
 

Описание

USAGE
Предоставляет привилегию USAGE для последовательности.

ON SEQUENCE имя-последовательности
Задает последовательность, для которой нужно предоставить привилегию USAGE. Имя-последовательности вместе с неявно или явно заданным именем схемы, должно однозначно задавать существующую последовательность на текущем сервере. Если в заданной схеме нет последовательности с таким именем, возникает ошибка (SQLSTATE 42704).

TO PUBLIC
Предоставить привилегию USAGE всем пользователям.

Примеры

Пример 1:  Предоставляет всем пользователям привилегию для последовательности с именем MYNUM

   GRANT USAGE ON SEQUENCE MYNUM TO PUBLIC
    

38.5.17 INSERT

Синтаксическая диаграмма изменена на:

>>-INSERT INTO----+-имя-таблицы-------------+------------------->
                  '-имя-производной-таблицы-'
 
>-----+----------------------------+---------------------------->
      |    .-,--------------.      |
      |    V                |      |
      '-(-----имя-столбца---+---)--'
 
                .-,-----------------------------------.
                V                                     |
>-----+-VALUES------+-+-выражение-+----------------+--+---------------+>
      |             | +-NULL------+                |                  |
      |             | '-DEFAULT---'                |                  |
      |             |    .-,----------------.      |                  |
      |             |    V                  |      |                  |
      |             '-(------+-выражение-+--+---)--'                  |
      |                      +-NULL------+                            |
      |                      '-DEFAULT---'                            |
      '-+-----------------------------------------+---полная-выборка--'
        |       .-,----------------------------.  |
        |       V                              |  |
        '-WITH-----общее-табличное-выражение---+--'
 
>-----+---------------+----------------------------------------><
      '-WITH--+-RR-+--'
              +-RS-+
              +-CS-+
              '-UR-'
 

Добавьте следующий текст в раздел описания:

WITH
Задает уровень изоляции, используемый при выполнении полной выборки.

RR
Многократное чтение

RS
Стабильность чтения

CS
Стабильность на уровне указателя

UR
Чтение непринятого

По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в котором связан этот оператор.

38.5.18 SELECT INTO

Синтаксическая диаграмма заменена на следующую:

                           .-,-------------------.
                           V                     |
>>-условие-select--INTO-------переменная-хоста---+-------------->
 
>----условие-from----------------------------------------------->
 
>----+---------------+--+------------------+--+----------------+->
     '-условие-where-'  '-условие-group-by-'  '-условие-having-'
 
>-----+---------------+----------------------------------------><
      '-WITH--+-RR-+--'
              +-RS-+
              +-CS-+
              '-UR-'
 

Добавьте следующий текст в раздел описания:

WITH
Задает уровень изоляции, используемый при выполнении оператора SELECT INTO.

RR
Многократное чтение

RS
Стабильность чтения

CS
Стабильность на уровне указателя

UR
Чтение непринятого

По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в котором связан этот оператор.

38.5.19 SET ENCRYPTION PASSWORD

SET ENCRYPTION PASSWORD

Оператор SET ENCRYPTION PASSWORD задает пароль, который будет использоваться функциями шифрования и дешифрования. Этот пароль не связан с аутентификацией DB2, он используется только для шифрования данных.

Этот оператор не контролируется программой управления транзакциями.

Коды возврата

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

Авторизация

Для выполнения этого оператора не требуются полномочия.

Внутреннее представление

                             .-=-.
>>-SET--ENCRYPTION PASSWORD--+---+--+-переменная-хоста---+-----><
                                    '-строчная-константа-'
 

Описание

Параметр ENCRYPTION PASSWORD может использоваться встроенными функциями ENCRYPT, DECRYPT_BIN и DECRYPT_CHAR для шифрования на основе пароля. Пароль может иметь длину от 6 до 127 байт, включительно. Все символы должны задаваться в нужном регистре, так как их преобразование в верхний регистр не производится.

переменная-хоста
Переменная типа CHAR или VARCHAR. Длина содержимого этой переменной хоста должна быть от 6 до 127 байт включительно (SQLSTATE 428FC). Для нее нельзя задать пустое значение. Все символы должны задаваться в нужном регистре, так как их преобразование в верхний регистр не производится.

строчная-константа
Константа типа символьная строка. Ее длина должна быть от 6 до 127 байт включительно (SQLSTATE 428FC).

Правила

Версия

Примеры

Пример 1:  Следующий оператор задает ENCRYPTION PASSWORD.

   SET ENCRYPTION PASSWORD = 'bubbalu'

38.5.20 SET переходная-переменная

Этот раздел изменен следующим образом:

SET переменная

Оператор SET переменная присваивает значения локальным переменным или новым переходным переменным. Он контролируется программой управления транзакциями.

Коды возврата

Это оператор можно использовать только как оператор SQL в динамических составных операторах, триггерах, функциях SQL или методах SQL.

Авторизация

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

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

Внутреннее представление

>>-SET---------------------------------------------------------->
 
      .-,--------------------------------------------------------------------------------------.
      V                                                                                        |
>--------+-| переменная-назначения |--=--+-выражение-+--------------------------------------+--+>
         |                               +-NULL------+                                      |
         |                               '-DEFAULT---'                                      |
         |    .-,----------------------------.               .-,-------------------.        |
         |    V                              |               V             (1)     |        |
         '-(-----| переменная-назначения |---+---)--=--(--+----+-выражение------+--+-+---)--'
                                                          |    +-NULL-----------+    |
                                                          |    '-DEFAULT--------'    |
                                                          |                (2)       |
                                                          '-полная-выборка-----------'
 
>--------------------------------------------------------------><
 
переменная-назначения
 
|---+-имя-переменной-SQL--------+---+------------------------+--|
    '-имя-переходной-переменной-'   |  .------------------.  |
                                    |  V                  |  |
                                    '----..имя-атрибута---+--'
 

Примечания:

  1. Число выражений и ключевых слов NULL и DEFAULT должно совпадать с числом переменных-назначения.

  2. Число столбцов в списке столбцов выборки должно совпадать с числом переменных-назначения.

Описание

переменная-назначения
Задает переменную назначения для присваивания. Переменную-назначения, представляющую одну и ту же переменную, нельзя задавать несколько раз (SQLSTATE 42701).

имя-переменной-SQL
Задает переменную SQL - назначение присваивания. Переменные SQL должны быть объявлены до их использования. Переменные SQL могут быть определены в динамическом составном операторе.

имя-переходной-переменной
Задает столбец, который нужно изменить в переходной строке. Имя-переходной-переменной должно задавать столбец в рабочей таблице триггера; в качестве необязательного спецификатора можно задать внутриоператорное имя, указывающее на новое значение (SQLSTATE 42703).

..имя-атрибута
Задает атрибут структурированного типа, для которого задается значение (указанный в присваивании атрибутов). Заданное имя-переменной-SQL или имя-переходной-переменной должно быть определено с пользовательским структурированным типом (SQLSTATE 428DP). Имя-атрибута должно быть атрибутом этого структурированного типа (SQLSTATE 42703). Присваивание, для которого не задано условие ..имя-атрибута, называют обычным присваиванием.

выражение
Задает новое значение переменной-назначения. Это может быть любое выражение, описанное в главе 2 справочника SQL Reference. Это выражение не может содержать функцию столбца, за исключением случая, когда оно входит в скалярную полную выборку (SQLSTATE 42903). В контексте оператора CREATE TRIGGER выражение может содержать ссылки на переходные переменные OLD и NEW, при этом для задания конкретной переходной переменной в качестве спецификатора должно быть задано внутриоператорное имя (SQLSTATE 42702).

NULL
Задает пустое значение; может использоваться только для столбцов, допускающих пустые значения (SQLSTATE 23502). Ключевое слово NULL нельзя задать в присваивании атрибута (SQLSTATE 429B9), если оно не может быть преобразовано в тип данных этого атрибута.

DEFAULT
Задает, что должно использоваться значение по умолчанию.

Если переменная-назначения - это столбец, вставляемое значение зависит от того, как определен этот столбец в таблице.

Если переменная-назначения - это переменная SQL, то вставляемое значение - это значение по умолчанию, заданное или подразумеваемое в объявлении этой переменной.

полная-выборка-строки
Полная выборка, возвращающая одну строку с числом столбцов, соответствующим числу переменных-назначения, заданных для присваивания. Значения присваиваются каждой соответствующей переменной-назначения. Если результат полной-выборки-строки не содержит строки, присваиваются пустые значения. В контексте оператора CREATE TRIGGER полная-выборка-строки может содержать ссылки на переходные переменные OLD и NEW, имя-корреляции которых должно указывать используемую переходную переменную (SQLSTATE 42702). Если результат содержит несколько строк, возникает ошибка (SQLSTATE 21000).

Правила

Версия

Примеры для этого оператора остались без изменений.

38.5.21 UPDATE

Синтаксическая диаграмма оператора UPDATE с поиском изменена:

>>-UPDATE----+-имя-таблицы-------------------------------+------>
             +-имя-производной-таблицы-------------------+
             '-ONLY--(--+-имя-таблицы-------------+---)--'
                        '-имя-производной-таблицы-'
 
>-----+--------------------------------+------------------------>
      | .-AS-.                         |
      '-+----+--внутриоператорное-имя--'
 
>-----SET--| условие-присваивания |----------------------------->
 
>-----+-------------------------+---+---------------+----------><
      '-WHERE--критерий-поиска--'   '-WITH--+-RR-+--'
                                            +-RS-+
                                            +-CS-+
                                            '-UR-'
 

Добавьте следующий текст в раздел описания:

WITH
Задает уровень изоляции, используемый при выполнении оператора UPDATE.

RR
Многократное чтение

RS
Стабильность чтения

CS
Стабильность на уровне указателя

UR
Чтение непринятого

По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в котором связан этот оператор.


Сноски:

6
Перед полной выборкой может идти общее-табличное-выражение

7
Перед полной выборкой может задаваться общее-табличное-выражение.

8
Перед вычислениями не выполняется преобразование предыдущего значения в исходный тип данных.


[ Начало страницы | Страница назад | Страница вперед | Содержание | Индекс ]