2016-06-14 27 views
0

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

+0

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

Antwort