- мин_знач)/АВ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 за следующим
значением. В следующем примере производится выборка псевдостолбцов