Я ищу функцию DB2 для вычисления хэшей для больших значений CLOB, чтобы быстро отслеживать изменения. Другие движки имеют такие функции, как CHECKSUM
, CRC32
или MD5
. Функция в LUW — GET_HASH_VALUE
, но недоступна в zOS.
Ограничения: нет доступа к пользовательским функциям или хранимым процедурам.
Вот быстрый и грязный фрагмент кода, который вычисляет 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 а>