Както вече знаете, ora_hash
не приема long
или LOB стойности. Можете да предадете първите 4k или 32k от XML съдържанието, но ако трябва да се уверите, че целият XML документ не се е променил, това няма да е достатъчно. И както Бен спомена, ora_hash
има максимум 4294967295 кофи, така че сблъсъците са доста по-вероятни, отколкото при SHA-1 или MD5. Както се казва в документацията, ora_hash
„е полезен за операции като анализиране на подмножество от данни и генериране на произволна извадка“.
Можете да използвате dbms_crypto
пакет за хеширане на цялата стойност на XMLType, като CLOB, извлечен с getClobVal
функция, с функция за обвивка, за да се улесни използването му:
create or replace function my_hash(xml xmltype) return raw is
begin
return dbms_crypto.hash(src=>xml.getclobval(), typ=>dbms_crypto.hash_sh1);
end;
/
След това можете да подадете своя XMLType, като стойност или като колона като част от избор:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289