如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?

Posted

技术标签:

【中文标题】如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?【英文标题】:How do you select an unique id in an DB2 table that was generated using DB2 generate unique() function? 【发布时间】:2021-05-31 16:47:06 【问题描述】:

我想从 DB2 表中选择信息,使用 DB2 generate unique() 函数生成的唯一 ID 作为简单选择查询中的键。

直接使用该字段,给出的 SQL 代码为 -333,在 select 中使用 HEX(unique id) 给出的 SQL 代码为 +100。

如何从表格中获取信息?

【问题讨论】:

这是一个编程网站。 __显示您的代码___。 Generate_Unique 返回 char(13) for bit data。查询时,宿主变量的数据类型必须兼容。 你的 cobol 预处理器应该理解 01 ... SQL TYPE IS BINARY(13) 并生成适当的结构。 【参考方案1】:

这取决于参数的数据类型。 如果你知道它的十六进制表示,那么:

DECLARE GLOBAL TEMPORARY TABLE SESSION.GEN_UNIQUE (U) AS (VALUES GENERATE_UNIQUE()) 
WITH DATA WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

SELECT HEX(U) AS HEX_VAL 
FROM SESSION.GEN_UNIQUE
WHERE U = HEXTORAW ('20210531172108210028000000');

|HEX_VAL                   |
|--------------------------|
|20210531172108210028000000|

如果你有CHAR(13) FOR BIT DATA,那么就可以照常使用了:

--#SET TERMINATOR @
BEGIN
  DECLARE L_VAR CHAR(13) FOR BIT DATA;
  DECLARE L_DUMMY INT;
  
  DECLARE EXIT HANDLER FOR NOT FOUND
  BEGIN 
    RESIGNAL SQLSTATE '70001' SET MESSAGE_TEXT = 'Oops!'; 
  END;
  
  SET L_VAR = HEXTORAW('20210531172108210028000000');
  SELECT 1 INTO L_DUMMY
  FROM SESSION.GEN_UNIQUE
  WHERE U = L_VAR;
END
@

【讨论】:

以上是关于如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?的主要内容,如果未能解决你的问题,请参考以下文章

Springboot 启动信息:Generating unique operation named

mysql生成不重复随机数(unique number generation)

linux C语言如何生成uuid(通用唯一识别码Universally Unique Identifier)?

linux C语言如何生成uuid(通用唯一识别码Universally Unique Identifier)?

是否可以在 db2 中的 create table 语句本身中定义索引?

模型字段唯一性验证错误处理