2016-06-14 3 views
0

Я ищу функцию DB2 для вычисления хэшей на больших значениях CLOB, чтобы быстро отслеживать изменения. Другие двигатели имеют такие функции, как CHECKSUM, CRC32 или MD5. Функция в LUW - GET_HASH_VALUE, но недоступна в zOS.Есть ли CRC32 или другая хеш-функция в DB2 для zOS?

Ограничения: нет доступа к 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 будут работать здесь чудесами, с низкими накладными расходами. Базовая программа CRC32 доступна на веб-сайте CBT Tape (z/OS freeware), посмотрите файл # 493. Целью DB2 z/OS является обеспечение совместимости z/OS и LUW, поэтому откройте запрос расширения. – zarchasmpgmr

ответ