GENERATE_UNIQUE 标量函数

GENERATE_UNIQUE 函数返回一个长度为 13 字节的位数据字符串 (CHAR (13) FOR BIT DATA) ,与同一函数的任何其他执行相比,该字符串是唯一的。

Read syntax diagramSkip visual syntax diagramGENERATE_UNIQUE()

该模式是 SYSIBM。

系统时钟用于生成内部全球标准时间 (UTC) 时间戳记以及执行该函数的数据库分区号。 将实际系统时钟向后移动的调整可能导致重复值。

该函数定义为非确定性函数。

此函数没有自变量 (必须指定空括号)。

此函数的结果是一个唯一值,其中包含 "全球标准时间" (UTC) 的内部格式以及处理此函数的数据库分区号。 结果不能为空。

此函数的结果可用于在表中提供唯一值。 每个连续值都将大于前一个值,从而提供可在表中使用的序列。 该值包含执行函数的数据库分区号,以便跨多个数据库分区分区的表在某些顺序中也具有唯一值。 该序列基于执行函数的时间。

此函数与使用专用寄存器 CURRENT TIMESTAMP 不同,因为针对多行插入语句的每行,带有全查询的插入语句或 MERGE 语句中的 INSERT 操作生成唯一值。

可以使用 TIMESTAMP 标量函数并将 GENERATE_UNIQUE 的结果作为自变量来确定作为此函数结果的一部分的时间戳记值。

示例

创建一个包含对每行唯一的列的表。 使用 GENERATE_UNIQUE 函数填充此列。 请注意, UNIQUE_ID 列已指定 FOR BIT DATA 以将该列标识为位数据字符串。
   CREATE TABLE EMP_UPDATE
     (UNIQUE_ID CHAR(13) FOR BIT DATA,
     EMPNO CHAR(6),
     TEXT VARCHAR(1000))
     INSERT INTO EMP_UPDATE
       VALUES (GENERATE_UNIQUE(), '000020', 'Update entry...'),
       (GENERATE_UNIQUE(), '000050', 'Update entry...') 
如果始终使用 GENERATE_UNIQUE 设置 UNIQUE_ID 列,那么此表将具有每行的唯一标识。 可以通过在表上引入触发器来完成此操作。
   CREATE TRIGGER EMP_UPDATE_UNIQUE
     NO CASCADE BEFORE INSERT ON EMP_UPDATE
     REFERENCING NEW AS NEW_UPD
     FOR EACH ROW
     SNEW_UPD.UNIQUE_ID = GENERATE_UNIQUE()
定义了此触发器后,可以在没有第一列的情况下发出先前的 INSERT 语句,如下所示。
   INSERT INTO EMP_UPDATE (EMPNO, TEXT)
     VALUES ('000020', 'Update entry 1...'),
     ('000050', 'Update entry 2...')
可以使用以下命令返回将行添加到 EMP_UPDATE 的时间戳记 (UTC):
   SELECT TIMESTAMP (UNIQUE_ID), EMPNO, TEXT
     FROM EMP_UPDATE
因此,在插入行时,不需要在表中有时间戳记列来记录。