2016-06-14 95 views
0

我正在寻找一个DB2函数来计算大CLOB值上的散列,以便快速跟踪更改。其他发动机的功能如CHECKSUM,CRC32MD5。 LUW中的函数是GET_HASH_VALUE,但在zOS中不可用。DB2 for zOS中是否存在CRC32或其他哈希函数?

约束:无权访问UDF或存储过程。

这是一个计算CRC32的快速和脏代码片段,它只能用于大约100个字符。

WITH crc(t,c,j) AS (
    SELECT 'Hello World!',4294967295,0 FROM SYSIBM.SYSDUMMY1 
    UNION ALL 
    SELECT SUBSTR(t,2),bitxor(c,ASCII(t)),8 FROM crc WHERE t>'' AND j=0 
    UNION ALL 
    SELECT t,BITXOR(c/2,BITAND(3988292384,-BITAND(c,1))),j-1 FROM crc WHERE j>0 
) 
SELECT RIGHT(HEX(BITNOT(c)),8) FROM CRC WHERE t='' AND j=0 

结果对http://www.lammertbies.nl/comm/info/crc-calculation.html检查:

1 
-------- 
1C291CA3 

来源:http://www.hackersdelight.org/hdcodetxt/crc.c.txt

+0

这些约束条件放在您身上,真是令人遗憾。金属C或组装者UDF在这里可以创造奇迹,开销很低。 CBT磁带(z/OS免费软件)网站上提供了一个基本的CRC32程序,请参阅文件#493。 DB2 z/OS'的目标是使z/OS和LUW兼容,因此打开一个增强请求。 – zarchasmpgmr

回答