Many applications that are written require the use of sequence
number to track invoice numbers, customer numbers, and other objects
which get incremented by one whenever a new item is required. The
database manager can auto-increment values in a table through the
use of identity columns. Although this technique works well for individual
tables, it might not be the most convenient way of generating unique
values that must be used across multiple tables.
The
sequence object lets you create a value that gets incremented
under programmer control and can be used across many tables. The following
example shows a sequence number being created for customer numbers
using a data type of integer:
CREATE SEQUENCE customer_no AS INTEGER
By default the sequence number starts at one and increments by
one at a time and is of an INTEGER data type. The application needs
to get the next value in the sequence by using the NEXT VALUE function.
This function generates the next value for the sequence which can
then be used for subsequent SQL statements:
VALUES NEXT VALUE FOR customer_no
Instead of generating the next number with the VALUES function,
the programmer could have used this function within an INSERT statement.
For instance, if the first column of the customer table contained
the customer number, an INSERT statement could be written as follows:
INSERT INTO customers VALUES
(NEXT VALUE FOR customer_no, 'comment', ...)
If the sequence number needs to be used for inserts into other
tables, the PREVIOUS VALUE function can be used to retrieve the previously
generated value. For instance, if the customer number just created
needs to be used for a subsequent invoice record, the SQL would include
the PREVIOUS VALUE function:
INSERT INTO invoices
(34,PREVIOUS VALUE FOR customer_no, 234.44, ...)
The PREVIOUS VALUE function can be used multiple times within the
application and it will only return the last value generated by that
application. It might be possible that subsequent transactions have
already incremented the sequence to another value, but you will always
see the last number that is generated.