GENERATE_UNIQUE 标量函数
GENERATE_UNIQUE 函数返回一个长度为 13 字节的位数据字符串 (CHAR (13) FOR BIT DATA) ,与同一函数的任何其他执行相比,该字符串是唯一的。
该模式是 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因此,在插入行时,不需要在表中有时间戳记列来记录。