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