Ich bin auf der Suche nach einer DB2-Funktion, um Hashes auf großen CLOB-Werten zu berechnen, um Änderungen schnell zu verfolgen. Andere Maschinen haben Funktionen wie CHECKSUM
, CRC32
oder MD5
. Die Funktion in LUW ist GET_HASH_VALUE
, ist aber in zOS nicht verfügbar.Gibt es in DB2 für zOS eine CRC32- oder andere Hash-Funktion?
Einschränkungen: Kein Zugriff auf UDFs oder gespeicherte Prozeduren.
Hier ist ein schnelles und schmutziges Codefragment, das ein CRC32 berechnet, es funktioniert nur zu ungefähr 100 Zeichen.
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
Ergebnis geprüft gegen http://www.lammertbies.nl/comm/info/crc-calculation.html:
1
--------
1C291CA3
Quelle: http://www.hackersdelight.org/hdcodetxt/crc.c.txt
Es ist eine Schande, dass diese Einschränkungen auf Sie angewendet werden. Ein Metal C oder Assembler UDF würde hier Wunder wirken, mit geringem Overhead. Ein grundlegendes CRC32-Programm ist auf der Website CBT Tape (z/OS Freeware) verfügbar, siehe Datei 493. Ziel von DB2 z/OS ist es, z/OS und LUW kompatibel zu machen, also eine Erweiterungsanforderung zu öffnen. – zarchasmpgmr