Seperti yang sudah Anda ketahui, ora_hash
tidak menerima long
atau nilai LOB. Anda dapat meneruskan 4k atau 32k pertama dari konten XML, tetapi jika Anda perlu memastikan bahwa seluruh dokumen XML tidak berubah, itu tidak akan cukup. Dan seperti yang Ben sebutkan, ora_hash
memiliki maksimum 4294967295 bucket, jadi kemungkinan tabrakan lebih besar dibandingkan dengan SHA-1 atau MD5. Seperti yang dikatakan dokumentasi, ora_hash
'berguna untuk operasi seperti menganalisis subset data dan menghasilkan sampel acak'.
Anda dapat menggunakan dbms_crypto
paket untuk hash seluruh nilai XMLType, sebagai CLOB yang diekstraksi dengan getClobVal
function, dengan fungsi wrapper agar lebih mudah digunakan:
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;
/
Anda kemudian dapat meneruskan XMLType Anda, sebagai nilai atau sebagai kolom sebagai bagian dari pilihan:
select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289