DB2 V9.7 for Linux, UNIX, and Windows

如何编码序列的示例

编写的许多应用程序需要使用序号来跟踪发票号、客户编号以及每次需要新项时其编号就会增大 1 的其他对象。通过使用标识列,数据库管理器可以使表中的值自动递增。虽然这项技术对于单独的表来说效果不错,但它可能不是生成多个表中必须使用的唯一值的最方便方法。

序列对象允许您创建在程序员控制下递增并且可以在许多表中使用的值。以下示例说明了如何为客户编号创建数据类型为 INTEGER 的序号:
    CREATE SEQUENCE customer_no AS INTEGER
缺省情况下,序号从 1 开始并且每次递增 1,其数据类型为 INTEGER。应用程序需要使用 NEXT VALUE 函数来获取序列中的下一个值。此函数生成序列的下一个值,然后可以将该值用于后续 SQL 语句:
    VALUES NEXT VALUE FOR customer_no
程序员可以在 INSERT 语句中使用 VALUES 函数,而不是使用此函数生成下一个数字。例如,如果 Customer 表的第一列包含客户编号,那么可以按如下所示编写 INSERT 语句:
    INSERT INTO customers VALUES
      (NEXT VALUE FOR customer_no, 'comment', ...)
如果需要对插入到其他表中的操作使用序号,那么可以使用 PREVIOUS VALUE 函数来检索先前生成的值。例如,如果需要将刚刚创建的客户编号用于后续发票记录,那么 SQL 应包括 PREVIOUS VALUE 函数:
    INSERT INTO invoices
      (34,PREVIOUS VALUE FOR customer_no, 234.44, ...)

PREVIOUS VALUE 函数可以在应用程序内多次使用,并且它仅返回该应用程序生成的最后一个值。后续事务可能已将序列递增至另一个值,但您看到的始终是生成的最后一个值。