Sequence oracle что это
Последовательности Oracle
SQL Server и Oracle поддерживают автоматическое создание столбцов автоприращения, которые могут использоваться в качестве первичных ключей. Эти значения формируются сервером по мере добавления строк в таблицу. В SQL Server задается свойство IDENTITY столбца, в Oracle создается последовательность. Разница между столбцами автоприращения в SQL Server и последовательностями в Oracle заключается в следующем.
В SQL Server столбец помечается как столбец автоприращения, и SQL Server автоматически формирует для него новые значения при вставке новой строки.
В Oracle создается последовательность новых значений для столбца таблицы, но отсутствует прямая связь между этой последовательностью и таблицей или столбцом. Последовательность Oracle является таким же объектом, как таблица или хранимая процедура.
При создании последовательности в базе данных Oracle можно определить ее начальное значение и приращение значений. Перед вставкой новых строк можно также запросить новые значения последовательности. Это означает, что код может получить ключевые значения для новых строк перед вставкой их в базу данных.
дополнительные сведения о создании столбцов с автоматическим приращением с помощью SQL Server и ADO.NET см. в разделе получение значений Identity или autoincrement и создание столбцов с автоувеличением.
Пример
В следующем примере на языке C# показано получение новых значений последовательности в базе данных Oracle. Пример ссылается на последовательность в запросе INSERT INTO, который используется для вставки новых строк, и возвращает значение последовательности, сформированное предложением RETURNING, впервые появившемся в Oracle10g. В примере добавляется набор новых строк в таблицу DataTable с помощью возможности автоприращения ADO.NET для формирования значений «местозаполнителей» первичного ключа. Обратите внимание, что значение приращения ADO.NET, сформированное для новых строк, представляет собой просто «местозаполнитель». Это означает, что база данных может сама сформировать эти значения вместо значений, созданных ADO.NET.
Перед вставкой ожидающих строк в базу данных пример отображает их содержимое на экране. Затем создается новый объект OracleDataAdapter, и его свойствам InsertCommand и UpdateBatchSize присваиваются значения. Пример применяет ту же логику, чтобы возвратить сформированные сервером значения с помощью выходных параметров. После этого пример выполняет вставку строк и отображает содержимое таблицы DataTable.
Create SEQUENCE
Последовательность SEQUENCE это объект базы данных, предназначенный для генерации целых чисел в соответствии с правилами, установленными при его создании. Генерируемые числа могут быть как положительные, так и отрицательные. Как правило, SEQUENCE используют для автоматической генерации значений первичных ключей. Последовательность является объектом базы данных, и генерируемое ею значения можно использовать для различных таблиц.
Синтаксис CREATE SEQUENCE
В общем виде синтаксис создания последовательности SEQUENCE для СУБД Oracle можно представить в следующем виде :
Несмотря на однозначное назначение SEQUENCE в различных СУБД имеются определенные различия, которые и будут рассмотрены в данной статье.
Тип генерируемого SEQUENCE значения
В MS SQL тип генерируемого значения можно определить при помощи оператора [ built_in_integer_type | user-defined_integer_type]. Если тип данных не указан, то по умолчанию используется тип bigint. Синтаксис выражения CREATE SEQUENCE для СУБД MS SQL :
SEQUENCE СУБД MS SQL может быть определена с определенным типом. Допускаются следующие типы :
Для SEQUENCE СУБД Apache Derby, аналогично MS SQL, может быть определен тип. Допускаются типы smallint, int, bigint. Синтаксис генератора последовательности SEQUENCE СУБД Apache Derby :
Атрибуты SEQUENCE
SCHEMA
SCHEMA определяет схему, в которой создается последовательность. Если SCHEMA опущена, то :
SEQUENCE_NAME
SEQUENCE_NAME определяет имя создаваемой последовательности.
START WITH
START WITH start_num — это первое значение, возвращаемое объектом последовательности. Значение должно быть не больше максимального и не меньше минимального значения объекта последовательности. По умолчанию начальным значением для нового объекта последовательности служит минимальное значение для объекта возрастающей последовательности и максимальное — для объекта убывающей.
INCREMENT BY
MAXVALUE maximum_num
MAXVALUE — максимальное значение maximum_num, создаваемое последовательностью. Если оно не указано, то применяется значение по умолчанию NOMAXVALUE.
MINVALUE minimum_num
MINVALUE — минимальное значение minimum_num, создаваемое последовательностью. Если оно не указано, то применяется значение по умолчанию NOMINVALUE.
NOMAXVALUE
NOMINVALUE
CYCLE
Применение в скрипте CYCLE позволяет последовательности повторно использовать созданные значения при достижении MAXVALUE или MINVALUE. Т.е. последовательность будет повторно гененировать значения с начальной позиции (со START’a). По умолчанию используется значение NOCYCLE. Указывать CYCLE вместе с NOMAXVALUE или NOMINVALUE нельзя.
NOCYCLE
NOCYCLE указывает, что последовательность не сможет генерировать значения после достижения максимума или минимума.
CACHE cache_num
Оператор CACHE в скрипте позволяет создавать заранее и поддерживать в памяти заданное количество значений последовательности для быстрого доступа.
В СУБД PostgreSQL минимальное значение равно 1 и соответствует значению NOCACHE.
В СУБД Oracle минимальное значение равно 2.
ORDER
Данный оператор используется только в СУБД Oracle. Он гарантирует, что номера последовательности генерируются в порядке запросов. Если упорядочение нежелательно или не установлено явным образом, Oracle применяет значение по умолчанию NOORDER, который не гарантирует, что номера последовательности генерируются в порядке запросов
Sequence oracle что это
When a sequence number is generated, the sequence is incremented, independent of the transaction committing or rolling back. If two users concurrently increment the same sequence, then the sequence numbers each user acquires may have gaps, because sequence numbers are being generated by the other user. One user can never acquire the sequence number generated by another user. After a sequence value is generated by one user, that user can continue to access that value regardless of whether the sequence is incremented by another user.
Sequence numbers are generated independently of tables, so the same sequence can be used for one or for multiple tables. It is possible that individual sequence numbers will appear to be skipped, because they were generated and used in a transaction that ultimately rolled back. Additionally, a single user may not realize that other users are drawing from the same sequence.
After a sequence is created, you can access its values in SQL statements with the CURRVAL pseudocolumn, which returns the current value of the sequence, or the NEXTVAL pseudocolumn, which increments the sequence and returns the new value.
Pseudocolumns for more information on using the CURRVAL and NEXTVAL
«How to Use Sequence Values» for information on using sequences
ALTER SEQUENCE or DROP SEQUENCE for information on modifying or dropping a sequence
To create a sequence in your own schema, you must have the CREATE SEQUENCE system privilege.
To create a sequence in another user’s schema, you must have the CREATE ANY SEQUENCE system privilege.
Sequence oracle что это
Purpose
Use the CREATE SEQUENCE statement to create a sequence, which is a database object from which multiple users may generate unique integers. You can use sequences to automatically generate primary key values.
When a sequence number is generated, the sequence is incremented, independent of the transaction committing or rolling back. If two users concurrently increment the same sequence, then the sequence numbers each user acquires may have gaps, because sequence numbers are being generated by the other user. One user can never acquire the sequence number generated by another user. Once a sequence value is generated by one user, that user can continue to access that value regardless of whether the sequence is incremented by another user.
Sequence numbers are generated independently of tables, so the same sequence can be used for one or for multiple tables. It is possible that individual sequence numbers will appear to be skipped, because they were generated and used in a transaction that ultimately rolled back. Additionally, a single user may not realize that other users are drawing from the same sequence.
Once a sequence is created, you can access its values in SQL statements with the CURRVAL pseudocolumn, which returns the current value of the sequence, or the NEXTVAL pseudocolumn, which increments the sequence and returns the new value.
See Also:
Chapter 3, » Pseudocolumns» for more information on using the CURRVAL and NEXTVAL
«How to Use Sequence Values » for information on using sequences
ALTER SEQUENCE or DROP SEQUENCE for information on modifying or dropping a sequence
Prerequisites
To create a sequence in your own schema, you must have the CREATE SEQUENCE system privilege.
To create a sequence in another user’s schema, you must have the CREATE ANY SEQUENCE system privilege.
Syntax
create_sequence::=
Description of the illustration create_sequence.gif
Semantics
Specify the name of the sequence to be created.
INCREMENT BY
START WITH
Specify the first sequence number to be generated. Use this clause to start an ascending sequence at a value greater than its minimum or to start a descending sequence at a value less than its maximum. For ascending sequences, the default value is the minimum value of the sequence. For descending sequences, the default value is the maximum value of the sequence. This integer value can have 28 or fewer digits.
Note:
This value is not necessarily the value to which an ascending cycling sequence cycles after reaching its maximum or minimum value.
NOMAXVALUE
MINVALUE
NOMINVALUE
Specify CYCLE to indicate that the sequence continues to generate values after reaching either its maximum or minimum value. After an ascending sequence reaches its maximum value, it generates its minimum value. After a descending sequence reaches its minimum, it generates its maximum value.
NOCYCLE
Specify NOCYCLE to indicate that the sequence cannot generate more values after reaching its maximum or minimum value. This is the default.
Specify how many values of the sequence the database preallocates and keeps in memory for faster access. This integer value can have 28 or fewer digits. The minimum value for this parameter is 2. For sequences that cycle, this value must be less than the number of values in the cycle. You cannot cache more values than will fit in a given cycle of sequence numbers. Therefore, the maximum value allowed for CACHE must be less than the value determined by the following formula:
If a system failure occurs, all cached sequence values that have not been used in committed DML statements are lost. The potential number of lost values is equal to the value of the CACHE parameter.
Note:
Oracle recommends using the CACHE setting to enhance performance if you are using sequences in a Real Application Clusters environment.
Specify ORDER to guarantee that sequence numbers are generated in order of request. This clause is useful if you are using the sequence numbers as timestamps. Guaranteeing order is usually not important for sequences used to generate primary keys.
ORDER is necessary only to guarantee ordered generation if you are using Oracle Database with Real Application Clusters. If you are using exclusive mode, sequence numbers are always generated in order.
NOORDER
Specify NOORDER if you do not want to guarantee sequence numbers are generated in order of request. This is the default.
Example
Creating a Sequence: Example
Sequence oracle что это
When a sequence number is generated, the sequence is incremented, independent of the transaction committing or rolling back. If two users concurrently increment the same sequence, then the sequence numbers each user acquires may have gaps, because sequence numbers are being generated by the other user. One user can never acquire the sequence number generated by another user. After a sequence value is generated by one user, that user can continue to access that value regardless of whether the sequence is incremented by another user.
Sequence numbers are generated independently of tables, so the same sequence can be used for one or for multiple tables. It is possible that individual sequence numbers will appear to be skipped, because they were generated and used in a transaction that ultimately rolled back. Additionally, a single user may not realize that other users are drawing from the same sequence.
After a sequence is created, you can access its values in SQL statements with the CURRVAL pseudocolumn, which returns the current value of the sequence, or the NEXTVAL pseudocolumn, which increments the sequence and returns the new value.
Pseudocolumns for more information on using the CURRVAL and NEXTVAL
«How to Use Sequence Values» for information on using sequences
ALTER SEQUENCE or DROP SEQUENCE for information on modifying or dropping a sequence
To create a sequence in your own schema, you must have the CREATE SEQUENCE system privilege.
To create a sequence in another user’s schema, you must have the CREATE ANY SEQUENCE system privilege.