Замечания по выпуску
Теперь поддерживается изменение ключа разделения. В Главе 6
перечисленные ниже утверждения не касаются случая, когда
DB2_UPDATE_PART_KEY=ON:
Прим.: | Если DB2_UPDATE_PART_KEY=OFF, эти ограничения остаются в силе.
|
Правила
- Столбец ключа разделения таблицы не может быть изменен (SQLSTATE
42997).
- Допускающий пустые значения столбец ключа разделения не может быть включен
в качестве столбца внешнего ключа, если отношение определено с условием ON
DELETE SET NULL (SQLSTATE 42997).
Правила
- Столбец ключа разделения таблицы не может быть изменен (SQLSTATE
42997).
- Допускающий пустые значения столбец ключа разделения не может быть включен
в качестве столбца внешнего ключа, если отношение определено с условием ON
DELETE SET NULL (SQLSTATE 42997).
Прим.: | Столбец ключа разделения таблицы не может быть изменен (SQLSTATE
42997).
|
Сноски
- 108 Столбец ключа разделения не может быть изменен (SQLSTATE
42997). Чтобы изменить ключ разделения, необходимо удалить строку
данных и вставить ее снова.
Если при определении индекса переменная реестра
DB2_INDEX_2BYTEVARLEN имеет значение ON, длина столбцов переменной длины,
входящих в этот индекс, включая первичные ключи и ключи уникальности, может
быть изменена на значение более 255 байт. Реально длина столбца
переменной длины, входящего во внешний ключ, теперь может быть изменена на
длину более 255 байт независимо от значения этой переменной реестра.
Однако данные длиной более 255 байт можно вставить в таблицу, только если
столбец соответствующего первичного ключа имеет длину более 255 байт, что
возможно, только если этот первичный ключ создан, когда эта переменная реестра
имела значение ON.
Индексы могут быть определены на столбцах переменной длины, размер
которых больше 255 байт, если переменная реестра DB2_INDEX_2BYTEVARLEN имеет
значение ON.
Первичные ключи и ключи уникальности, в которые входят столбцы
переменной длины, могут иметь размер больше 255, если переменная реестра
DB2_INDEX_2BYTEVARLEN имеет значение ON. Внешние ключи могут быть
определены на столбцах переменной длины, размер которых больше 255
байт.
Оператор ALTER SEQUENCE изменяет атрибуты последовательности:
- Перезапуская последовательность
- Изменяя приращение между последующими значениями последовательности
- Задавая новые минимальные или максимальные значения
- Изменяя число значений последовательности, сохраняемых в кэше
- Задавая, должна ли последовательность генерироваться циклически или нет
- Задавая, должны ли значения последовательности генерироваться в порядке
запросов
Коды возврата
Этот оператор может быть встроен в прикладную программу или выполняться как
динамический оператор SQL. Это выполняемый оператор, который можно
подготовить динамически. Но если применяется опция связывания
DYNAMICRULES BIND, этот оператор нельзя подготовить динамически (SQLSTATE
42509).
Авторизация
Привилегии ID авторизации этого оператора, должны включать, как минимум,
одну из следующих привилегий:
- Привилегии определившего эту последовательность
- Привилегия ALTERIN для неявно или явно заданной схемы
- Полномочия SYSADM или DBADM
Внутреннее представление
>>-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, значения
последовательности могут совпадать со значениями, генерируемыми этой
последовательностью ранее.
Версия
- Оператор ALTER SEQUENCE влияет только на будущие значения
последовательности.
- Тип данных последовательности нельзя изменить. Вместо этого
отбросьте последовательность и заново создайте ее, задав для новой
последовательности требуемый тип данных.
- При изменении последовательности все ее значения в кэше будут
потеряны.
Примеры
Пример 1: Причиной задания RESTART без числового значения
может быть необходимость перезапустить последовательность со значения START
WITH. В этом примере целью является генерация чисел с 1 до числа строк
в таблице и затем вставка этих чисел в столбец, добавленный в таблицу с
помощью временных таблиц. Другой вариант использования - получение
результата с перенумерованными строками:
ALTER SEQUENCE org_seq
RESTART
SELECT NEXTVAL for org_seq, org.*
FROM org
Изменения во фрагментах синтаксиса:
изменение-столбца
|--имя-столбца-------------------------------------------------->
>-----+-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----'
Примечания:
- Эти параметры можно задавать без пробелов: 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
- Задает, что значения столбца идентификации не нужно генерировать в порядке
запросов.
В составном операторе SQL ATOMIC не разрешен подготовленный оператор
COMMIT.
Составной оператор объединяет вместе другие операторы в один выполняемый
блок. Внутри динамически подготовленного составного оператора 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--+-------+---.
>----+-----------------------+---строчная-константа-------------|
Примечания:
- Метка может быть задана, только если этот оператор находится в определении
функции, метода или триггера.
Описание
- метка
- Задает метку для этого блока кода. Если задана метка начала, ее
можно использовать в качестве спецификатора для переменных SQL, объявленных в
этом динамическом составном операторе; ее можно также использовать в
операторе LEAVE. Если задана метка конца, она должна совпадать с меткой
начала.
- ATOMIC
- Ключевое слово ATOMIC указывает, что при возникновении ошибки в этом
составном операторе будет выполнен откат для всех выполненных в этом составном
операторе операторов SQL, а оставшиеся в этом составном операторе операторы
SQL не будут выполняться.
- оператор-процедуры-SQL
- Внутри динамического составного оператора можно использовать следующие
управляющие-операторы-SQL:
- оператор FOR
- оператор GET DIAGNOSTICS
- оператор IF
- оператор ITERATE
- оператор LEAVE
- оператор SIGNAL
- оператор WHILE
Операторы SQL, которые могут быть вызваны:
- полная выборка
6
- UPDATE с поиском
- DELETE с поиском
- INSERT
- оператор SET переменная
- объявление-переменной-SQL
- Объявляет переменную, локальную для этого динамического составного
оператора.
- имя-переменной-SQL
- Задает имя локальной переменной. DB2 преобразует все имена
переменных SQL в верхний регистр. Это имя не может:
- Совпадать с именем другой переменной SQL в том же составном
операторе.
- Совпадать с именем параметра.
- Совпадать с именем столбца.
Если оператор SQL содержит идентификатор, совпадающий и с именем
переменной SQL, и с именем столбца, DB2 интерпретирует этот идентификатор как
имя столбца.
- тип-данных
- Задает тип данных этой переменной.
- DEFAULT значения-по-умолчанию или NULL
- Задает значение по умолчанию для этой переменной SQL. Переменная
инициализируется при вызове этого динамического составного оператора.
Если значение по умолчанию не задано, переменная инициализируется значением
NULL.
- объявление-условия
- Объявляет имя условия и соответствующее значение SQLSTATE.
- имя-условия
- Задает имя условия. Имя условия должно быть уникальным в теле
процедуры; на него можно ссылаться только внутри составного оператора, в
котором оно определено.
- FOR SQLSTATE строчная-константа
- Задает SQLSTATE для этого условия. Строчная-константа
должна представлять собой пять символов, заключенных в простые кавычки;
она не может быть равна '00000'.
Версия
- Динамический составной оператор компилируется системой DB2 как один
оператор. Такой оператор эффективен для коротких алгоритмов, содержащих
небольшое число управляющих конструкций, но обрабатывающих значительное число
данных. Для более сложных алгоритмов, содержащих сложные вложенные
управляющие конструкции, лучше использовать процедуры SQL.
Синтаксическая диаграмма изменена на следующую
>>-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).
Синтаксическая диаграмма заменена на следующую:
>>-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-----------------+-------------------------|
'-динамический-составной-оператор-'
Примечания:
- Вместо условия CALLED ON NULL INPUT можно задать NULL CALL
- Допустимо, только если в RETURNS задан скалярный результат (тип-данных2)
Измените следующие параметры:
- LANGUAGE SQL
- Указывает, что функция написана на языке SQL.
Этот блок параметров заменяет блок параметров "RETURN expression, NULL,
WITH common-table-expression, fullselect".
- тело-функции-SQL
- Задает тело функции. В теле-функции-SQL можно использовать имена
параметров. Чтобы избежать неоднозначности, можно добавить к именам
параметров в качестве спецификатора имя функции.
Если тело-функции-SQL представляет собой динамический составной оператор,
оно должно содержать по крайней мере один оператор RETURN, который должен быть
выполнен при вызове функции (SQLSTATE 42632). Если это табличная
функция или строчная функция, она может содержать только один оператор RETURN,
который должен быть последним оператором динамического составного оператора
(SQLSTATE 429BD).
Дополнительную информацию смотрите в разделах Составной оператор (динамический) и RETURN.
Синтаксическая диаграмма заменена на следующую:
Внутреннее представление
>>-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 должно соответствовать следующим частям объявления
метода:
- DETERMINISTIC или NOT DETERMINISTIC (SQLSTATE 428C2)
- EXTERNAL ACTION или NO EXTERNAL ACTION (SQLSTATE 428C2)
- CONTAINS SQL или READS SQL DATA (SQLSTATE 42985)
В теле-метода-SQL можно использовать имена параметров. Объект метода
передается реализации метода как неявный первый параметр с именем SELF.
Дополнительную информацию смотрите в разделах Составной оператор (динамический) и RETURN.
Оператор CREATE SEQUENCE создает последовательность на сервере прикладных
программ.
Коды возврата
Этот оператор может быть встроен в прикладную программу или выполняться как
динамический оператор SQL. Это выполняемый оператор, который можно
подготовить динамически. Но если применяется опция связывания
DYNAMICRULES BIND, этот оператор нельзя подготовить динамически (SQLSTATE
42509).
Авторизация
Привилегии ID авторизации этого оператора, должны содержать, как минимум,
одну из следующих привилегий:
- Привилегию CREATEIN для неявно или явно заданной схемы
- Полномочия SYSADM или DBADM
Внутреннее представление
>>-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----------------'
Примечания:
- Эти параметры можно задавать без пробелов: 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
- Задает, что значения последовательности не нужно генерировать в порядке
запросов. Эта опция принимается по умолчанию.
Версия
- Можно определить последовательность, содержащую одинаковые значения, то
есть всегда возвращающую одно и то же значение. Для этого можно задать
одинаковые значения MINVALUE и MAXVALUE или задать нулевое значение
INCREMENT. В любом случае чтобы разрешить NEXTVAL генерировать
несколько раз одно и то же значение, необходимо задать опцию CYCLE.
Последовательность с одинаковыми значениями может использоваться в качестве
числовой глобальной переменной. Для изменения значения, генерируемого
последовательностью с одинаковыми значениями, можно использовать оператор
ALTER SEQUENCE.
- С помощью оператора ALTER SEQUENCE можно вручную сделать
последовательность циклической. Если явно или неявно задана опция NO
CYCLE, последовательность можно перезапустить или расширить, используя
оператор ALTER SEQUENCE, чтобы вызвать продолжение генерации значений после
того, как было достигнуто максимальное или минимальное значение для этой
последовательности.
- При кэшировании значений последовательности некоторое число ее значений
может храниться в памяти для быстрого доступа. Когда прикладная
программа обращается к последовательности, для которой следующее значение
может быть взято из кэша, это значение будет получено быстро. Однако
если прикладная программа обращается к последовательности, следующее значение
которой не может быть взято из кэша, для получения этого значения может
потребоваться ожидание выполнения операций ввода-вывода для всей области
хранения значений. При выборе значения опции CACHE нужно выбирать между
производительностью и потребностями прикладной программы.
- Владелец новой последовательности обладает для нее привилегиями ALTER и
USAGE. Владелец последовательности может предоставлять для нее только
привилегию USAGE и только всем пользователям (PUBLIC).
- Поддерживается также следующий синтаксис: NOMINVALUE, NOMAXVALUE,
NOCYCLE, NOCACHE и NOORDER.
Примеры
Пример 1: Создать последовательность с именем
org_seq:
CREATE SEQUENCE org_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 24
Внутреннее представление
>>-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--(--критерий-поиска--)--'
Примечания:
- Каждое из условий OLD и NEW можно задавать только один раз.
- Каждое из условий OLD_TABLE и NEW_TABLE можно задавать только один раз и
только для триггеров AFTER.
- Условие 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 INSERT
- оператор SQL UPDATE с поиском
- оператор SQL DELETE с поиском
- оператор SET переменная
- полную выборку 7
В операторе-процедуры-SQL нельзя использовать неопределенные
переходные переменные (SQLSTATE 42703) или объявленные временные таблицы
(SQLSTATE 42995).
В операторе-процедуры-SQL триггера BEFORE нельзя использовать
таблицу сводки, определенную с условием REFRESH IMMEDIATE (SQLSTATE
42997).
В операторе-процедуры-SQL триггера BEFORE нельзя использовать
генерируемые столбцы (кроме столбца идентификации) в новой переходной
переменной (SQLSTATE 42989).
Раздел Notes (Примечания) изменен следующим образом:
- Результат полной выборки, заданной в операторе-процедуры-SQL не
доступен внутри и вне триггера.
- Неработоспособные триггеры:
Неработоспособный
триггер - это триггер, который более недоступен и поэтому никогда не
активируется. Триггеры становятся неработоспособными, если:
- Создатель триггера был лишен привилегии, необходимой для выполнения
триггера.
- Отброшен объект (такой как таблица, производная таблица или алиас), от
которого зависит действие триггера.
- Производная таблица, от которой зависит действие триггера, стала
неработоспособной.
- Отброшен алиас, представляющий рабочую таблицу триггера.
Практически неработоспособный триггер - это триггер, определение которого
было отброшено в результате последовательного применения правил для операторов
DROP или REVOKE. Например, если отброшена производная таблица, все
триггеры, в определении оператора-процедуры-SQL которых используется
эта производная таблица, становятся неработоспособными.
Если триггер стал неработоспособными, все пакеты с операторами,
выполняющими действия, которые активировали этот триггер, отмечаются как
дефектные. При повторном связывании пакета (явном или неявном)
неработоспособный триггер полностью игнорируется.
Аналогично, прикладные программы с динамическими операторами SQL, выполняющие
действия, которые активировали этот триггер, также будут полностью
игнорировать все неработоспособные триггеры.
Имя такого триггера все еще можно задавать в операторах DROP TRIGGER и
COMMENT ON TRIGGER.
Неработоспособный триггер можно создать заново с помощью оператора CREATE
TRIGGER, используя текст определения этого неработоспособного триггера.
Текст этого определения триггера хранится с столбце TEXT таблицы
SYSCAT.TRIGGERS. Обратите внимание на то, что не нужно явно
отбрасывать неработоспособный триггер, чтобы создать его заново. Если
введен оператор CREATE TRIGGER с тем же именем-триггера, что и
неработоспособный триггер, этот неработоспособный триггер будет заменен и
будет выдано предупреждение (SQLSTATE 01595).
Неработоспособные триггеры обозначаются символом X в столбце VALID
производной таблицы каталога SYSCAT.TRIGGERS.
- Ошибки при выполнении триггеров:
Если при выполнении оператора SQL триггера возникли ошибки, которые не
считаются серьезными, возвращается SQLSTATE 09000. Если возникла
серьезная ошибка, возвращается SQLSTATE этой ошибки. Для ошибок, не
считающихся серьезными, поле SQLERRMC области SQLCA будет содержать имя
триггера, SQLCODE, SQLSTATE и все уместившиеся в нем элементы сообщения об
ошибке.
Оператор-процедуры-SQL может содержать оператор SIGNAL SQLSTATE
или функцию RAISE_ERROR. В обоих этих случаях возвращается SQLSTATE,
заданный в операторе SIGNAL SQLSTATE или условии RAISE_ERROR.
В Linux используются библиотеки LIBDRDA.SO и
LIBSQLNET.SO, а не LIBDRDA.A и
LIBSQLNET.A.
В операторе "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" (может быть изменен).
Синтаксическая диаграмма оператора DELETE с поиском изменена на
следующую:
>>-DELETE FROM----+-имя-таблицы-------------------------------+->
+-имя-производной-таблицы-------------------+
'-ONLY--(--+-имя-таблицы-------------+---)--'
'-имя-производной-таблицы-'
>-----+--------------------------------+------------------------>
| .-AS-. |
'-+----+--внутриоператорное-имя--'
>-----+-------------------------+---+---------------+----------><
'-WHERE--критерий-поиска--' '-WITH--+-RR-+--'
+-RS-+
+-CS-+
'-UR-'
DELETE с указанием позиции:
>>-DELETE FROM----+-имя-таблицы-------------------------------+->
+-имя-производной-таблицы-------------------+
'-ONLY--(--+-имя-таблицы-------------+---)--'
'-имя-производной-таблицы-'
>----WHERE CURRENT OF--имя-указателя---------------------------><
Добавьте следующий текст в раздел описания:
- WITH
-
Задает уровень изоляции, используемый при поиске удаляемых строк.
- RR
- Многократное чтение
- RS
- Стабильность чтения
- CS
- Стабильность на уровне указателя
- UR
- Чтение непринятого
По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в
котором связан этот оператор.
Добавьте следующую опцию:
>>-SEQUENCE--имя-последовательности--RESTRICT------------------><
Добавьте следующие параметры:
- SEQUENCE имя-последовательности RESTRICT
-
Указывает конкретную последовательность, которую нужно отбросить.
Имя-последовательности вместе с неявно или явно заданным именем схемы
должно задавать существующую последовательность на текущем сервере.
Если в явно или неявно заданной схеме нет последовательности с таким именем,
возникает ошибка (SQLSTATE 42704).
Ключевое слово RESTRICT запрещает отбрасывать последовательность, если она
используется в определении какого-либо столбца таблицы (для столбца
IDENTITY).
Прим.: |
- Созданные системой последовательности для столбцов IDENTITY нельзя
отбросить с помощью команды DROP последовательность.
- При отбрасывании последовательности отбрасываются также все привилегии для
этой последовательности.
|
Таблицу, в которой показаны зависимости объектов друг от друга (Таблица
27), нужно изменить так:
Новая строка: DROP SEQUENCE. Элемент таблицы на пересечении
этой новой строки "DROP SEQUENCE" и столбца "PACKAGE" будет содержать
"A". Остальные элементы в этой новой строке будут содержать "-".
Эта форма оператора GRANT предоставляет привилегии для пользовательской
последовательности.
Коды возврата
Этот оператор может быть встроен в прикладную программу или выполняться как
динамический оператор SQL. Это выполняемый оператор, который можно
подготовить динамически. Но если применяется опция связывания
DYNAMICRULES BIND, этот оператор нельзя подготовить динамически (SQLSTATE
42509).
Авторизация
Привилегии ID авторизации этого оператора, должны включать, как минимум,
одну из следующих привилегий:
- Привилегии владельца последовательности
- Полномочия SYSADM или DBADM
Внутреннее представление
>>-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
Синтаксическая диаграмма изменена на:
>>-INSERT INTO----+-имя-таблицы-------------+------------------->
'-имя-производной-таблицы-'
>-----+----------------------------+---------------------------->
| .-,--------------. |
| V | |
'-(-----имя-столбца---+---)--'
.-,-----------------------------------.
V |
>-----+-VALUES------+-+-выражение-+----------------+--+---------------+>
| | +-NULL------+ | |
| | '-DEFAULT---' | |
| | .-,----------------. | |
| | V | | |
| '-(------+-выражение-+--+---)--' |
| +-NULL------+ |
| '-DEFAULT---' |
'-+-----------------------------------------+---полная-выборка--'
| .-,----------------------------. |
| V | |
'-WITH-----общее-табличное-выражение---+--'
>-----+---------------+----------------------------------------><
'-WITH--+-RR-+--'
+-RS-+
+-CS-+
'-UR-'
Добавьте следующий текст в раздел описания:
- WITH
-
Задает уровень изоляции, используемый при выполнении полной выборки.
- RR
- Многократное чтение
- RS
- Стабильность чтения
- CS
- Стабильность на уровне указателя
- UR
- Чтение непринятого
По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в
котором связан этот оператор.
Синтаксическая диаграмма заменена на следующую:
.-,-------------------.
V |
>>-условие-select--INTO-------переменная-хоста---+-------------->
>----условие-from----------------------------------------------->
>----+---------------+--+------------------+--+----------------+->
'-условие-where-' '-условие-group-by-' '-условие-having-'
>-----+---------------+----------------------------------------><
'-WITH--+-RR-+--'
+-RS-+
+-CS-+
'-UR-'
Добавьте следующий текст в раздел описания:
- WITH
-
Задает уровень изоляции, используемый при выполнении оператора SELECT
INTO.
- RR
- Многократное чтение
- RS
- Стабильность чтения
- CS
- Стабильность на уровне указателя
- UR
- Чтение непринятого
По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в
котором связан этот оператор.
Оператор 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).
Правила
- Исходное значение ENCRYPTION PASSWORD - пустая строка
('').
- Эта переменная-хоста или строчная-константа передается серверу баз данных
с помощью обычных механизмов DB2.
Версия
Примеры
Пример 1: Следующий оператор задает ENCRYPTION
PASSWORD.
SET ENCRYPTION PASSWORD = 'bubbalu'
Этот раздел изменен следующим образом:
Оператор SET переменная присваивает значения локальным переменным или новым
переходным переменным. Он контролируется программой управления
транзакциями.
Коды возврата
Это оператор можно использовать только как оператор SQL в динамических
составных операторах, триггерах, функциях SQL или методах SQL.
Авторизация
Чтобы можно было использовать переходные переменные, привилегии ID
авторизации создателя триггера, должны включать, как минимум, одну из
следующих привилегий:
- Привилегии UPDATE для столбцов, указанных в левой части присваивания, и
SELECT для всех столбцов, указанных в правой части присваивания.
- Привилегию CONTROL для таблицы (рабочей таблицы триггера)
- Полномочия SYSADM или DBADM.
Чтобы выполнять этот оператор с полной-выборкой-строк в правой
части присваивания, привилегии ID авторизации создателя триггера или владельца
динамического составного оператора, должны также включать по крайней мере одну
из следующих привилегий для каждой используемой в операторе таблицы или
производной таблицы:
- Привилегия SELECT
- Привилегия CONTROL
- Полномочия SYSADM или DBADM.
Внутреннее представление
>>-SET---------------------------------------------------------->
.-,--------------------------------------------------------------------------------------.
V |
>--------+-| переменная-назначения |--=--+-выражение-+--------------------------------------+--+>
| +-NULL------+ |
| '-DEFAULT---' |
| .-,----------------------------. .-,-------------------. |
| V | V (1) | |
'-(-----| переменная-назначения |---+---)--=--(--+----+-выражение------+--+-+---)--'
| +-NULL-----------+ |
| '-DEFAULT--------' |
| (2) |
'-полная-выборка-----------'
>--------------------------------------------------------------><
переменная-назначения
|---+-имя-переменной-SQL--------+---+------------------------+--|
'-имя-переходной-переменной-' | .------------------. |
| V | |
'----..имя-атрибута---+--'
Примечания:
- Число выражений и ключевых слов NULL и DEFAULT должно совпадать с числом
переменных-назначения.
- Число столбцов в списке столбцов выборки должно совпадать с числом
переменных-назначения.
Описание
- переменная-назначения
- Задает переменную назначения для присваивания.
Переменную-назначения, представляющую одну и ту же переменную, нельзя
задавать несколько раз (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
- Задает, что должно использоваться значение по умолчанию.
Если переменная-назначения - это столбец, вставляемое значение
зависит от того, как определен этот столбец в таблице.
- Если в определении столбца задано условие WITH DEFAULT, в качестве этого
значения используется значение по умолчанию, заданное для этого
столбца.
- Если в определении столбца задано условие IDENTITY, это значение
генерируется менеджером баз данных.
- Если в определении столбца не заданы условия WITH DEFAULT, IDENTITY или
NOT NULL, это значение будет равно NULL.
- Если в определении столбца задано условие NOT NULL, но не задано условие
IDENTITY или условие WITH DEFAULT или задано условие DEFAULT NULL, для этого
столбца нельзя задавать ключевое слово DEFAULT (SQLSTATE 23502).
Если переменная-назначения - это переменная SQL, то вставляемое
значение - это значение по умолчанию, заданное или подразумеваемое в
объявлении этой переменной.
- полная-выборка-строки
- Полная выборка, возвращающая одну строку с числом столбцов,
соответствующим числу переменных-назначения, заданных для присваивания.
Значения присваиваются каждой соответствующей переменной-назначения.
Если результат полной-выборки-строки не содержит строки, присваиваются пустые
значения. В контексте оператора CREATE TRIGGER
полная-выборка-строки может содержать ссылки на переходные
переменные OLD и NEW, имя-корреляции которых должно указывать
используемую переходную переменную (SQLSTATE 42702). Если результат
содержит несколько строк, возникает ошибка (SQLSTATE 21000).
Правила
- Число значений для присваивания, задаваемых выражениями, ключевыми словами
NULL и DEFAULT или полной-выборкой-строки, должно совпадать с числом
переменных-назначения, заданных для присваивания (SQLSTATE 42802).
- В одном операторе SET переходная переменная нельзя присваивать значения
переменной SQL и переходной переменной (SQLSTATE 42997).
- Значения присваиваются переменным-назначения в соответствии с правилами,
описанными в главе 2 справочника SQL Reference.
Если оператор используется в триггере BEFORE UPDATE и переменная реестра
DB2_UPDATE_PART_KEY=OFF, переходная-переменная, заданная в качестве
переменной-назначения, не может быть столбцом ключа разделения
(SQLSTATE 42997).
Версия
- Если оператор содержит несколько присваиваний, все выражения и
полные-выборки-строки вычисляются перед выполнением
присваиваний. Поэтому ссылки на переменные-назначения в выражении или
полной выборке строки всегда дают значение переменной-назначения, которое она
имела до выполнения всех присваиваний в отдельном операторе SET.
- При обновлении столбца идентификации, который определен с особым типом
данных, все вычисления производятся в исходном типе данных и затем результат
преобразуется в этот особый тип перед фактическим присваиванием значения
столбцу.
8
- Чтобы система DB2 генерировала значение в операторе SET для столбца
идентификации, используйте ключевое слово DEFAULT:
SET NEW.EMPNO = DEFAULT
В этом примере NEW.EMPNO определен как столбец
идентификации; используемое для его обновления значение генерируется
DB2.
Примеры для этого оператора остались без изменений.
Синтаксическая диаграмма оператора UPDATE с поиском изменена:
>>-UPDATE----+-имя-таблицы-------------------------------+------>
+-имя-производной-таблицы-------------------+
'-ONLY--(--+-имя-таблицы-------------+---)--'
'-имя-производной-таблицы-'
>-----+--------------------------------+------------------------>
| .-AS-. |
'-+----+--внутриоператорное-имя--'
>-----SET--| условие-присваивания |----------------------------->
>-----+-------------------------+---+---------------+----------><
'-WHERE--критерий-поиска--' '-WITH--+-RR-+--'
+-RS-+
+-CS-+
'-UR-'
Добавьте следующий текст в раздел описания:
- WITH
-
Задает уровень изоляции, используемый при выполнении оператора UPDATE.
- RR
- Многократное чтение
- RS
- Стабильность чтения
- CS
- Стабильность на уровне указателя
- UR
- Чтение непринятого
По умолчанию уровень изоляции оператора - это уровень изоляции пакета, в
котором связан этот оператор.
Сноски:
- 6
-
Перед полной выборкой может идти общее-табличное-выражение
- 7
-
Перед полной выборкой может задаваться общее-табличное-выражение.
- 8
-
Перед вычислениями не выполняется преобразование предыдущего значения в
исходный тип данных.
[ Начало страницы | Страница назад | Страница вперед | Содержание | Индекс ]