Оракул последовательности, что это такое

Обновлено: 21.11.2024

Последовательность — это список целых чисел, в которых важны их порядки. Например, (1,2,3,4,5) и (5,4,3,2,1) — совершенно разные последовательности, даже если они состоят из одних и тех же элементов.

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

Команда CREATE SEQUENCE позволяет создать новый объект последовательности в вашей собственной схеме.

Например, этот оператор использует оператор CREATE SEQUENCE для создания нового объекта последовательности с именем item_seq :

Вы используете объект sequence для создания последовательности уникальных целых чисел, в основном для суррогатных ключевых столбцов.

Обратите внимание, что Oracle 12c автоматически создает объект последовательности, связанный со столбцом идентификаторов таблицы.

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

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

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

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

В этом примере используется последовательность item_seq в операторах INSERT для заполнения значениями столбца item_id таблицы items:

Вот результат:

Начиная с Oracle 11g, вы можете использовать последовательности в PL/SQL. За кулисами Oracle по-прежнему использует запрос из двойной таблицы, но это делает код чище:

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

Чтобы изменить атрибуты и поведение существующего объекта последовательности, используйте оператор ALTER SEQUENCE.

В следующем примере используется ALTER SEQUENCE, чтобы установить максимальное значение для item_seq равным 100:

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

Чтобы удалить существующую последовательность из базы данных, используйте оператор DROP SEQUENCE. В следующем примере оператор DROP SEQUENCE используется для удаления последовательности item_seq:

Привилегии последовательности Oracle

Oracle предоставляет системную привилегию CREATE SEQUENCE, позволяющую создавать, изменять и удалять последовательности.

Эта инструкция предоставляет пользователю привилегию CREATE SEQUENCE:

Кроме того, Oracle предоставляет следующие привилегии, которые позволяют вам манипулировать последовательностями во всех схемах, включая встроенные:

  • СОЗДАТЬ ЛЮБУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ
  • ИЗМЕНИТЬ ЛЮБУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ
  • УДАЛИТЬ ЛЮБУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ
  • ВЫБЕРИТЕ ЛЮБУЮ ПОСЛЕДОВАТЕЛЬНОСТЬ

Поэтому следует серьезно подумать, прежде чем выполнять следующую команду:

Если вы являетесь владельцем последовательности, у вас будут полные права на последовательность. Чтобы предоставить другому пользователю доступ к последовательности, вы можете предоставить этому пользователю привилегию SELECT объекта, как показано в следующей команде:

Подробнее о последовательностях

  • CREATE SEQUENCE — создать новый объект последовательности в базе данных.
  • ИЗМЕНИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ — изменить атрибуты и поведение существующей последовательности.
  • УДАЛИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ — удалить существующую последовательность.

В этом руководстве вы узнали о последовательности Oracle, включая создание, использование, изменение и удаление последовательности.

Используйте оператор CREATE SEQUENCE для создания последовательности, которая представляет собой объект базы данных, из которого несколько пользователей могут генерировать уникальные целые числа. Вы можете использовать последовательности для автоматического создания значений первичного ключа.

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

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

После создания последовательности вы можете получить доступ к ее значениям в операторах SQL с помощью псевдостолбца CURRVAL, который возвращает текущее значение последовательности, или псевдостолбца NEXTVAL, который увеличивает последовательность и возвращает новое значение.

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

Глава 3, "Псевдостолбцы" для получения дополнительной информации об использовании CURRVAL и NEXTVAL

"Как использовать значения последовательности" для получения информации об использовании последовательностей

ALTER SEQUENCE или DROP SEQUENCE для получения информации об изменении или удалении последовательности

Чтобы создать последовательность в собственной схеме, у вас должна быть системная привилегия CREATE SEQUENCE.

Чтобы создать последовательность в схеме другого пользователя, у вас должна быть системная привилегия CREATE ANY SEQUENCE.

Укажите схему, которая будет содержать последовательность. Если вы опустите schema , Oracle Database создаст последовательность в вашей собственной схеме.

Укажите имя создаваемой последовательности. Имя должно удовлетворять требованиям, перечисленным в «Правилах именования объектов базы данных».

Если вы не укажете ни одно из следующих предложений, вы создадите восходящую последовательность, которая начинается с 1 и увеличивается на 1 без верхнего предела. Если указать только УВЕЛИЧЕНИЕ НА -1, создается убывающая последовательность, которая начинается с -1 и уменьшается без нижнего предела.

Чтобы создать последовательность с неограниченным увеличением, для возрастающих последовательностей опустите параметр MAXVALUE или укажите NOMAXVALUE . Для нисходящих последовательностей опустите параметр MINVALUE или укажите NOMINVALUE .

Чтобы создать последовательность, которая останавливается на заданном пределе, для восходящей последовательности укажите значение параметра MAXVALUE. Для нисходящей последовательности укажите значение параметра MINVALUE. Также укажите NOCYCLE . Любая попытка создать порядковый номер после того, как последовательность достигла предела, приводит к ошибке.

Чтобы создать последовательность, которая перезапускается после достижения предопределенного предела, укажите значения для параметров MAXVALUE и MINVALUE. Также укажите ЦИКЛ .

INCREMENT BY Укажите интервал между порядковыми номерами. Это целочисленное значение может быть любым положительным или отрицательным целым числом, но не может быть 0. Это значение может содержать 28 или меньше цифр для возрастающей последовательности и 27 или меньше цифр для убывающей последовательности. Абсолют этого значения должен быть меньше, чем разница между MAXVALUE и MINVALUE. Если это значение отрицательное, то последовательность снижается. Если значение положительное, то последовательность возрастает. Если вы опустите это предложение, интервал по умолчанию будет равен 1.

НАЧАТЬ С Укажите первый создаваемый порядковый номер. Используйте это предложение, чтобы начать восходящую последовательность со значения, превышающего ее минимум, или чтобы начать нисходящую последовательность со значения, меньшего ее максимума. Для восходящих последовательностей значением по умолчанию является минимальное значение последовательности. Для нисходящих последовательностей значением по умолчанию является максимальное значение последовательности. Это целочисленное значение может содержать не более 28 цифр для положительных значений и не более 27 цифр для отрицательных значений.

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

MAXVALUE Укажите максимальное значение, которое может создать последовательность. Это целочисленное значение может содержать 28 или меньше цифр для положительных значений и 27 или меньше цифр для отрицательных значений. MAXVALUE должно быть больше или равно START WITH и должно быть больше MINVALUE .

NOMAXVALUE Укажите NOMAXVALUE, чтобы указать максимальное значение 10 28 -1 для восходящей последовательности или -1 для нисходящей последовательности. Это значение по умолчанию.

MINVALUE Укажите минимальное значение последовательности. Это целочисленное значение может содержать 28 или меньше цифр для положительных значений и 27 или меньше цифр для отрицательных значений. MINVALUE должно быть меньше или равно START WITH и должно быть меньше MAXVALUE .

NOMINVALUE Укажите NOMINVALUE, чтобы указать минимальное значение 1 для восходящей последовательности или -(10 27 -1) для нисходящей последовательности. Это значение по умолчанию.

CYCLE Укажите CYCLE, чтобы указать, что последовательность продолжает генерировать значения после достижения максимального или минимального значения. После того, как восходящая последовательность достигает своего максимального значения, она генерирует свое минимальное значение. Когда нисходящая последовательность достигает своего минимума, она создает максимальное значение.

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

КЭШ Укажите, сколько значений последовательности предварительно выделяет база данных и хранит в памяти для более быстрого доступа. Это целочисленное значение может содержать 28 или меньше цифр. Минимальное значение этого параметра равно 2. Для циклически повторяющихся последовательностей это значение должно быть меньше числа значений в цикле. Вы не можете кэшировать больше значений, чем поместится в данном цикле порядковых номеров. Следовательно, максимальное значение, допустимое для CACHE, должно быть меньше значения, определяемого по следующей формуле:

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

Oracle рекомендует использовать параметр CACHE для повышения производительности, если вы используете последовательности в среде Oracle Real Application Clusters.

NOCACHE Укажите NOCACHE, чтобы указать, что значения последовательности не выделяются заранее. Если вы опустите и CACHE, и NOCACHE , то база данных по умолчанию кэширует 20 порядковых номеров.

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

ORDER необходим только для гарантии упорядоченной генерации, если вы используете Oracle Real Application Clusters. Если вы используете эксклюзивный режим, порядковые номера всегда генерируются по порядку.

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

KEEP Укажите KEEP, если вы хотите, чтобы NEXTVAL сохранял исходное значение во время воспроизведения для обеспечения непрерывности приложения. Это происходит только в том случае, если пользователь, запускающий приложение, является владельцем схемы, содержащей последовательность. Это предложение полезно для обеспечения согласованности переменных связывания при воспроизведении после исправимых ошибок. Дополнительные сведения о непрерывности приложений см. в Руководстве по разработке баз данных Oracle.

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

SESSION Укажите SESSION, чтобы создать последовательность сеанса, представляющую собой особый тип последовательности, специально предназначенный для использования с глобальными временными таблицами, имеющими видимость сеанса. В отличие от существующих обычных последовательностей (называемых для сравнения «глобальными» последовательностями), последовательность сеанса возвращает уникальный диапазон порядковых номеров только в пределах сеанса, но не между сеансами. Еще одно отличие состоит в том, что последовательности сеансов не являются постоянными. Если сеанс завершается, то же самое происходит и с состоянием последовательностей сеансов, к которым обращались во время сеанса.

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

Предложения CACHE , NOCACHE , ORDER или NOORDER игнорируются, если они указаны в предложении SESSION.

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

Создание последовательности: пример Следующий оператор создает последовательность customers_seq в образце схемы oe . Эту последовательность можно использовать для предоставления идентификационных номеров клиентов при добавлении строк в таблицу клиентов.

В этом руководстве по Oracle объясняется, как создавать и удалять последовательности в Oracle с синтаксисом и примерами.

Описание

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

Создать последовательность

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

Синтаксис

Синтаксис для создания последовательности в Oracle:

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

Пример

Давайте рассмотрим пример создания последовательности в Oracle.

Это создаст объект последовательности с именем supplier_seq. Первый порядковый номер, который он будет использовать, равен 1, а каждое последующее число будет увеличиваться на 1 (например: 2,3,4. >. Он будет кэшировать до 20 значений для повышения производительности.

Если вы не укажете параметр MAXVALUE, ваша последовательность автоматически будет по умолчанию:

Таким образом, вы можете упростить команду CREATE SEQUENCE следующим образом:

Теперь, когда вы создали объект последовательности для имитации поля автонумерации, мы рассмотрим, как получить значение из этого объекта последовательности. Чтобы получить следующее значение в порядке следования, необходимо использовать nextval.

Это позволит получить следующее значение из supplier_seq. Оператор nextval должен использоваться в операторе SQL. Например:

Этот оператор вставки вставит новую запись в таблицу suppliers. Полю supplier_id будет присвоен следующий номер из последовательности supplier_seq. В поле supplier_name будет указано Kraft Foods.

Последовательность перетаскивания

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

Синтаксис

Синтаксис удаления последовательности в Oracle:

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

Пример

Давайте рассмотрим пример удаления последовательности в Oracle.

В этом примере будет удалена последовательность с именем supplier_seq.

Часто задаваемые вопросы

Один распространенный вопрос о последовательностях:

Вопрос. Что означают параметры cache и nocache при создании последовательности? Например, вы можете создать последовательность с кэшем 20 следующим образом:

Или вы можете создать ту же последовательность с параметром nocache:

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

Недостаток создания последовательности с помощью кэша заключается в том, что в случае сбоя системы все кэшированные значения последовательности, которые не использовались, будут "потеряны". Это приводит к «пробелу» в назначенных значениях последовательности. Когда система вернется в исходное состояние, Oracle будет кэшировать новые числа с того места, где они остановились в последовательности, игнорируя так называемые «потерянные» значения последовательности.

СОВЕТ. Чтобы восстановить потерянные значения последовательности, вы всегда можете выполнить команду ALTER SEQUENCE, чтобы сбросить счетчик на правильное значение.

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

Вопрос. Как установить значение LASTVALUE в последовательности Oracle?

Ответ: вы можете изменить LASTVALUE для последовательности Oracle, выполнив команду ALTER SEQUENCE.

Например, если последним значением, использованным в последовательности Oracle, было 100, и вы хотите сбросить последовательность, чтобы в качестве следующего значения использовалось 225. Вы должны выполнить следующие команды.

Вывод: в этом руководстве вы узнаете, как использовать оператор Oracle CREATE SEQUENCE для создания новой последовательности в Oracle.

Введение в оператор Oracle CREATE SEQUENCE

Команда CREATE SEQUENCE позволяет создать новую последовательность в базе данных.

Вот основной синтаксис оператора CREATE SEQUENCE:

СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ

Укажите имя последовательности после ключевых слов CREATE SEQUENCE. Если вы хотите создать последовательность в определенной схеме, вы можете указать имя схемы вместе с именем последовательности.

УВЕЛИЧЕНИЕ НА

Укажите интервал между порядковыми номерами после ключевого слова INCREMENT BY.

Интервал может содержать менее 28 цифр. Оно также должно быть меньше, чем MAXVALUE - MINVALUE .

Если интервал положительный, последовательность восходящая, например, 1,2,3,…

Если интервал отрицательный, последовательность убывающая, например, -1, -2, -3…

Значение интервала по умолчанию равно 1.

НАЧАТЬ С

Укажите первое число в последовательности.

Значением по умолчанию первого числа является минимальное значение последовательности для восходящей последовательности и максимальное значение последовательности для нисходящей последовательности.

МАКС. ЗНАЧЕНИЕ

Укажите максимальное значение последовательности.

Максимальное_значение должно быть больше или равно значению first_number, указанному после ключевых слов START WITH.

NOMAXVALUE

Используйте NOMAXVALUE для обозначения максимального значения 10^27 для восходящей последовательности или -1 для нисходящей последовательности. Oracle использует этот параметр по умолчанию.

МИНЗНАЧ

Укажите минимальное значение последовательности.

Min_value должно быть меньше или равно first_number и должно быть меньше max_value .

НОМИНАЛЬНОЕ ЗНАЧЕНИЕ

Используйте NOMINVALUE, чтобы указать минимальное значение 1 для восходящей последовательности или -10^26 для нисходящей последовательности. Это значение по умолчанию.

ЦИКЛ

Используйте ЦИКЛ, чтобы позволить последовательности генерировать значение после достижения предела, минимальное значение для нисходящей последовательности и максимальное значение для восходящей последовательности.

Когда восходящая последовательность достигает своего максимального значения, она создает минимальное значение.

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

НОЦИКЛ

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

КЭШ

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

Минимальный размер кэша равен 2. Максимальное значение размера кэша определяется по следующей формуле:

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

ЗАКАЗ

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

Этот параметр полезен, если вы используете Oracle Real Application Clusters. При использовании эксклюзивного режима Oracle всегда будет генерировать порядковые номера по порядку.

НЕТ ЗАКАЗА

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

Примеры инструкции Oracle CREATE SEQUENCE

Давайте рассмотрим пример использования последовательностей.

1) Пример базовой последовательности Oracle

Следующий оператор создает восходящую последовательность с именем id_seq , начиная с 10, увеличивая на 10, минимальное значение 10, максимальное значение 100. Последовательность возвращает 10, когда достигает 100 из-за параметра CYCLE.

Чтобы получить следующее значение последовательности, используйте псевдостолбец NEXTVAL:

Вот результат:

Чтобы получить текущее значение последовательности, используйте псевдостолбец CURRVAL:

Текущее значение – 10:

В этом операторе SELECT неоднократно используется значение id_seq.NEXTVAL:

Вот результат:

Поскольку мы установили параметр CYCLE для последовательности id_seq, следующим значением id_seq будет 10:

А вот и результат:

2) Использование последовательности в примере столбца таблицы

В более ранних версиях Oracle 12c последовательность можно было косвенно связать со столбцом таблицы только во время вставки.

См. следующий пример.

Во-вторых, создайте последовательность для столбца id таблицы tasks:

В-третьих, вставьте данные в таблицу задач:

Наконец, запросите данные из таблицы tasks:

В этом примере таблица tasks не имеет прямой связи с последовательностью task_id_seq.

3) Использование последовательности на примере столбца идентификаторов

В Oracle 12c вы можете связать последовательность со столбцом таблицы через столбец идентификаторов.

Сначала удалите таблицу задач:

Во-вторых, заново создайте таблицу задач, используя столбец идентификаторов для столбца идентификаторов:

Незаметно Oracle создает последовательность, которая связывается со столбцом id таблицы tasks.

Поскольку Oracle автоматически создает последовательность для столбца id, в вашем экземпляре Oracle имя последовательности может быть другим.

Oracle использует sys.idnseq$ для хранения связи между таблицей и последовательностью.

Этот запрос возвращает связь таблицы tasks и последовательности ISEQ$$_74366:

В-третьих, вставьте несколько строк в таблицу задач:

Наконец, запросите данные из таблицы tasks:

В этом руководстве вы узнали, как использовать оператор Oracle CREATE SEQUENCE для создания новой последовательности в базе данных.

Читайте также: