【问题标题】:How do you select an unique id in an DB2 table that was generated using DB2 generate unique() function?如何在使用 DB2 generate unique() 函数生成的 DB2 表中选择唯一 ID?
【发布时间】: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) 并生成适当的结构。

标签: sql db2 cobol


【解决方案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
@

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多