जैसा कि आप पहले से ही जानते हैं, ora_hash
long
स्वीकार नहीं करता या LOB मान। आप XML सामग्री के पहले 4k या 32k में पास कर सकते हैं, लेकिन यदि आपको यह सुनिश्चित करने की आवश्यकता है कि संपूर्ण XML दस्तावेज़ नहीं बदला है, तो यह पर्याप्त नहीं होगा। और जैसा कि बेन ने बताया, ora_hash
अधिकतम 4294967295 बकेट हैं, इसलिए टकराव की संभावना SHA-1 या MD5 की तुलना में अधिक है। जैसा कि दस्तावेज़ीकरण कहता है, ora_hash
'डेटा के एक सबसेट का विश्लेषण करने और एक यादृच्छिक नमूना उत्पन्न करने जैसे संचालन के लिए उपयोगी है'।
आप dbms_crypto
. का उपयोग कर सकते हैं पूरे XMLType मान को हैश करने के लिए पैकेज, getClobVal
के साथ निकाले गए CLOB के रूप में उपयोग करने में आसान बनाने के लिए रैपर फ़ंक्शन के साथ फ़ंक्शन:
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