A sequence is a database object that allows the automatic
generation of values, such as cheque numbers. Sequences are ideally suited
to the task of generating unique key values. Applications can use sequences
to avoid possible concurrency and performance problems resulting from column
values used to track numbers. The advantage that sequences have over numbers
created outside the database is that the database server keeps track of the
numbers generated. A crash and restart will not cause duplicate numbers from
being generated.
The sequence numbers generated have the following properties:
- Values can be any exact numeric data type with a scale of zero. Such data
types include: SMALLINT, BIGINT, INTEGER, and DECIMAL.
- Consecutive values can differ by any specified integer increment. The
default increment value is 1.
- Counter value is recoverable. The counter value is reconstructed from
logs when recovery is required.
- Values can be cached to improve performance. Pre-allocating and storing
values in the cache reduces synchronous I/O to the log when values are generated
for the sequence. In the event of a system failure, all cached values that
have not been used are considered lost. The value specified for CACHE is the
maximum number of sequence values that could be lost.
There are two expressions that can used with sequences:
- NEXT VALUE expression: returns the next value for the specified
sequence. A new sequence number is generated when a NEXT VALUE expression
specifies the name of the sequence. However, if there are multiple instances
of a NEXT VALUE expression specifying the same sequence name within a query,
the counter for the sequence is incremented only once for each row of the
result, and all instances of NEXT VALUE return the same value for each row
of the result.
- PREVIOUS VALUE expression: returns the most recently generated
value for the specified sequence for a previous statement within the current
application process. That is, for any given connection, the PREVIOUS VALUE
remains constant even if another connection invokes NEXT VALUE.
For complete details and examples of these expressions, see Sequence reference.