9.16.Sequence Objects
Virtuoso supports sequence objects. These can be used to generate sequential numbers which can be used as unique identifiers. A sequence object is guaranteed never to give the same number twice. Each sequence has a name and a state. The state of a sequence is stored in the database at checkpoint time. Between checkpoints sequence states are logged so that a possible roll forward recovery will not lose information.
The SQL functions sequence_next
()
and sequence_set
() are used to
access and set the state of sequences. These take the name of the
sequence as argument. This is a server/wide unique string. There
are no restrictions on the length or character set of the
sequence
Sequences do not have to be separately created. A sequence
object will automatically be generated when first referenced by
sequence_next
() or sequence_set.
sequence_next (in name varchar) returns integer
sequence_set (in name varchar, in state integer, in mode integer) returns integer
Function sequence_next
() returns
the current state of the specified sequence and atomically
increments it by one. The next call will thus return a number one
greater than the previous. The sequence is shared between all
connections and all transactions. Using a sequence never involves
locking.
Function sequence_set
() sets and
returns the state of a sequence object. The next call to
sequence_next
() will return this
same number. If mode equals 0, the state is set regardless of the
previous state. If mode is non-zero, the state is set only if the
new state is greater then the previous state. Calling sequence_set
('sequence'' , 0, 1) will always return the sequence's state
without changing it.
Each autoincrement column corresponds to an internal sequence
object. The name of the sequence object is'DB.DBA.' plus the
concatenation of the table's qualifier, owner, table name and
column name, e.g. 'DB.DBA.db.dba.my_table.ai_column'. The user does
not normally need to know about the sequence associated with an
autoincrement column unless he or she wishes to change the sequence
values using the sequence_set()
function and the sequence objects name.
See the section on identity columns under create table and the function identity_value and the related ODBC statement option SQL_GETLASTSERIAL for more.