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


35.2 Глава 6. Common DB2 Application Techniques

35.2.1 Генерирование последовательных значений

Генерирование последовательных значений - обычная проблема при разработке прикладных программ для баз данных. Наилучшее решение этой проблемы - использовании объектов последовательности и выражений последовательности на языке SQL. Каждый объект последовательности - это объект базы данных с уникальным именем, к которому можно обращаться только с помощью выражений последовательности. Существует два выражения последовательности: выражение PREVVAL и выражение NEXTVAL. Выражение PREVVAL возвращает последнее из сгенерированных для предыдущего оператора значений заданной последовательности. Выражение NEXTVAL увеличивает значение объекта последовательности и возвращает его новое значение.

Чтобы создать объект последовательности, выполните оператор CREATE SEQUENCE. Например, чтобы создать объект последовательности под названием id_values с атрибутами по умолчанию, используйте следующий оператор:

CREATE SEQUENCE id_values

Чтобы вывести текущее значение этого объекта последовательности, выполните оператор VALUES с выражением PREVVAL:

VALUES PREVVAL FOR id_values
 
1
-----------
1
 
            1 record(s) selected.

Текущее значение объекта последовательности можно получать несколько раз, причем возвращаемое значение не изменится, пока не будет выполнено выражение NEXTVAL. В следующем примере выражение PREVVAL возвращает значение 1 до тех пор, пока выражение NEXTVAL не увеличит значение объекта последовательности:

VALUES PREVVAL FOR id_values
 
1
-----------
1
 
            1 record(s) selected.
 
VALUES PREVVAL FOR id_values
 
1
-----------
1
 
            1 record(s) selected.
 
VALUES NEXTVAL FOR id_values
 
1
-----------
          2
 
            1 record(s) selected.
 
VALUES PREVVAL FOR id_values
 
1
-----------
          2
 
            1 record(s) selected.

Чтобы изменить значение столбца на следующее значение объекта последовательности, включите выражение NEXTVAL в оператор UPDATE, как показано ниже:

UPDATE staff
  SET id = NEXTVAL FOR id_values
  WHERE id = 350

Чтобы вставить новую строку в таблицу, используя следующее значение объекта последовательности, включите выражение NEXTVAL в оператор INSERT, как показано ниже:

INSERT INTO staff (id, name, dept, job)
  VALUES (NEXTVAL FOR id_values, 'Kandil', 51, 'Mgr')

Дополнительную информацию о выражениях PREVVAL и NEXTVAL смотрите в справочнике SQL Reference.

35.2.1.1 Управление поведением последовательности

Поведение объектов последовательности можно настроить в соответствии с потребностями вашей прикладной программы. Атрибуты объекта последовательности изменяют операторы CREATE SEQUENCE (создание нового объекта последовательности) и ALTER SEQUENCE (изменение существующего объекта последовательности). Ниже приводятся некоторые из доступных вам атрибутов объекта последовательности:

Тип данных
Условие AS оператора CREATE SEQUENCE задает числовой тип данных объекта последовательности. Тип данных, как указано в приложении "SQL Limits" справочника SQL Reference, определяет возможные минимальное и максимальное значения объекта последовательности. Тип данных объекта последовательности нельзя изменить; вместо этого надо отбросить объект последовательности при помощи оператора DROP SEQUENCE и выполнить оператор CREATE SEQUENCE с новым типом данных.

Начальное значение
Условие START WITH оператора CREATE SEQUENCE задает начальное значение объекта последовательности. Условие RESTART WITH оператора ALTER SEQUENCE возвращает значение объекта последовательности к заданному значению.

Минимальное значение
Условие MINVALUE задает минимальное значение объекта последовательности.

Максимальное значение
Условие MAXVALUE задает максимальное значение объекта последовательности.

Значение приращения
Условие INCREMENT BY задает значение, добавляемое к объекту последовательности каждым выражением NEXTVAL. Чтобы значение объекта последовательности уменьшалось, задайте в условии отрицательную величину.

Зацикливание последовательности
Условие CYCLE заставляет значение объекта последовательности после достижения минимума или максимума вернуться при очередном выражении NEXTVAL к исходному значению.

Например, чтобы создать объект последовательности под названием id_values, с начальным значением 0, максимальным значением 1000, увеличением значения на 2 с каждым выражением NEXTVAL и возвращением к начальному значению по достижении максимального, используйте оператор:

CREATE SEQUENCE id_values
  START WITH 0
  INCREMENT BY 2
  MAXVALUE 1000
  CYCLE

Дополнительную информацию об операторах CREATE SEQUENCE и ALTER SEQUENCE смотрите в справочнике SQL Reference.

35.2.1.2 Улучшение производительности с помощью объектов последовательности

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

Объекты последовательности позволяют избежать проблем с блокировкой, связанных с использованием одностолбцовой таблицы; можно кэшировать значения в памяти, что улучшает время ответа DB2. Чтобы максимизировать производительность прикладных программ, использующих объекты последовательности, убедитесь, что ваш объект последовательности кэширует достаточное количество значений. Условие CACHE операторов CREATE SEQUENCE и ALTER SEQUENCE задает максимальное количество значений последовательности, которые DB2 генерирует и хранит в памяти.

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

35.2.1.3 Сравнение объектов последовательности и столбцов идентификации

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


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