Выбрать главу

- мин_знач)/АВ8(приращение);

■ N0CACHE определяет, что значения последовательности не хранятся в

кэше. Это не позволяет базе данных заранее выделять значения для

последовательности, что предотвращает появление числовых разрывов

в последовательности, но уменьшает производительность.

Разрывы возникают по причине потери кэшированных значений

при отключении базы данных. Если опустить CACHE и N0CACHE, то база

данных по умолчанию закэширует 20 чисел последовательности;

■ ORDER используется для гарантии того, что целые числа будут генерироваться

в порядке-поступления запросов. Ключевое слово ORDER

обычно употребляется при использовании Real Application Clusters,

которые создаются и поддерживаются администраторами базы данных.

Real Application Clusters представляют собой несколько серверов

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

Real Application Clusters могут улучшить производительность;

■ N00RDER не гарантирует, что целые числа будут генерироваться в порядке

поступления запросов. Ключевое слово N00RDER является значением

по умолчанию.

В следующем примере производится подключение под пользователем

store и создается последовательность с именем s _ te s t (в начале имени последовательности

я всегда помещаю s_):

□ CONNECT sto re /sto re_passw o rd

CREATE SEQUENCE s_ te s t;

Поскольку в операторе CREATE SEQUENCE опущены все необязательные

параметры, для последовательности будут использованы значения по

умолчанию. Это означает, в частности, что такие параметры, как начальное

значение и приращение по умолчанию, получат значение 1 .

В следующем примере будет создана последовательность с именем s_

t e s t 2, в которой будут указаны необязательные параметры:

□ CREATE SEQUENCE s_ te s t2

START WITH 10 INCREMENT BY 5

MINVALUE 10 MAXVALUE 20

CYCLE CACHE 2 ORDER;

В заключительном примере будет создана последовательность s_ te s t3 ,

которая начинается с 10 и ведет обратный счет до 1 :

□ CREATE SEQUENCE s_ te s t3

START WITH 10 INCREMENT BY -1

Создание таблиц, последовательностей, индексов и представлений 329

MINVALUE 1 MAXVALUE 10

CYCLE CACHE 5;

Получение информации о последовательностях

Получить информацию о созданных последовательностях можно, сделав

запрос к представлению user_sequences. В таблице 10.6 перечислены столбцы

u s e r . s e q u e n c e s .

Примечание Информацию о всех последовательностях, к которым вам разрешен доступ,

можно получить, задав запрос к представлению all_sequences.

Таблица 10.6. Некоторые столбцы в user_sequences

Столбец Тип Описание

sequence.name VARCHAR2(30) Имя последовательности.

min.value NUMBER Минимальное значение.

max.value NUMBER Максимальное значение.

increment.by NUMBER Число, на которое увеличивается или уменьшается значение

последовательности.

cycle_flag VARCHAR2(1) Указывает, может ли последовательность зацикливаться.

Принимает значения Y или N.

order_flag VARCHAR2(1) Указывает, является ли последовательность упорядоченной.

Принимает значения Y или N.

cache_size NUMBER Количество значений последовательности, хранящихся в

памяти.

last.nunber NUMBER Последнее значение, сгенерированное или переданное

последовательностью в кэш.

В следующем примере показано, как получить подробную информацию

о последовательностях из user_sequences:

□ COLUMN sequence_name FORMAT аб

SELECT * FROM user_sequences

ORDER BY sequence_name;

SEQUENCE NAME MIN VALUE MAX_VALUE INCREMENT.

CACHE_SIZE LAST_NUMBER

S TEST 1 1 .0000E+27 1 N N 20

S TEST2 10 20 5 Y Y 2 10

S TEST3 1 10 -1 Y N 5 10

Использование последовательностей

Последовательность генерирует ряд чисел. Она содержит два псевдостолбца

— c u r r v a l и n e x t v a l , которые используются для получения из последовательности

ее текущего и последующих значений.

330 Глава 10

Прежде чем получить из последовательности текущее значение, ее необходимо

инициализировать, получив ее следующее значение. При выборе

s _ te s t. n e x tv a l последовательность инициализируется в 1. Следующий

оператор SELECT осуществляет выборку s _ te s t. n e x tval; во фразе FROM используется

таблица duaclass="underline"

□ SELECT s_test.nextval

FROM dual;

NEXTVAL

1

Первое значение последовательности s _ te s t равно 1. После инициализации

можно получить текущее значение последовательности, используя

псевдостолбец currval. Например:

□ SELECT s_test.currval

FROM dual;

CURRVAL _ -

1

При выборке c u r r v a l значение n e x tv a l остается без изменения; оно

изменяется только в том случае, если вы обращаетесь к n e x tv a l за следующим

значением. В следующем примере производится выборка псевдостолбцов