=====PL/SQL md5 Hash erzeugen===== **Aufgabe**: für die die Quersumme eines Datensatzes soll ein Hash ermittelt werden. Mit Hilfe des Hashes kann beim nächsten Lauf ermittelt werden, ob sich Daten einer Zeile verändert haben und weitere Schritte beim Laden der Daten notwendig werden. Je nach Datenbank Version stehen verschiedene Funktionen dazu zur Verfügung. Falls der Hash plötzlich nicht gleich ist in zwei Läufen, auf den Zeichensatz der Umgebung achten! Daher hier mit "convert(v_data,'WE8ISO8859P1')" alles auf meine Ziel Umgebung explizit gecastet um hier Fehler auszuschließen! ---- ==== 10g - DBMS_OBFUSCATION_TOOLKIT==== declare v_data varchar2(32001):='x'; v_hash varchar2(200); begin for i in 1..32000 loop v_data:= v_data || 'x'; end loop; v_hash:=DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw(convert(v_data,'WE8ISO8859P1'))); dbms_output.put_line('--Info MD5 hash='||v_hash) ; end; / => https://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_obtool.htm#BHBIEGHF ---- ==== 11g - DBMS_CRYPTO ==== Spätestens ab 11g sollte nicht mehr mit DBMS_OBFUSCATION_TOOLKIT gearbeitet werden, das das nicht mehr weiter von Oracle unterstützt wird! declare v_data varchar2(32001):='x'; v_hash varchar2(200); begin -- Test Daten for i in 1..32000 loop v_data:= v_data || 'x'; end loop; v_hash:=DBMS_CRYPTO.HASH (src => UTL_RAW.cast_to_raw(convert(v_data,'WE8ISO8859P1')), typ => SYS.DBMS_CRYPTO.HASH_MD5); dbms_output.put_line('--Info MD5 hash='||v_hash) ; end; / => http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_crypto.htm ---- ==== 12c - STANDARD_HASH ==== select STANDARD_HASH('Gunther','MD5') from dual; STANDARD_HASH('GUNTHER','MD5') -------------------------------- D59AF18A3984A94B5B94F7717BB4FAC8 Gültige Algorithmen sind SHA1, SHA256, SHA384, SHA512, und MD5. SHA1 ist der Default! => https://docs.oracle.com/database/121/SQLRF/functions183.htm#SQLRF55647 ----