我想在xmltype数据类型上使用ORA_HASH,解决方法是直接的解决方案吗?
我使用oracle 11g r2和二进制xml作为xmltype列的存储选项
我用于创建表的查询是
create table samplebinary ( indexid number(19,0) , xmlcolumn xmltype not null) xmltype column xmlcolumn store as binary xml;
答案 0 :(得分:6)
如您所知,ora_hash
doesn't accept long
or LOB values。您可以传入XML内容的前4k或32k,但如果您需要确保整个XML文档没有更改,那么这还不够。正如Ben所说,ora_hash
最多有4294967295个桶,因此碰撞比使用SHA-1或MD5更可能。正如文档所述,ora_hash
'对于分析数据子集和生成随机样本等操作非常有用。
您可以使用the dbms_crypto
package来散列整个XMLType值,作为使用the getClobVal
function提取的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:
的一部分传递select my_hash(xml) from t42;
MY_HASH(XML)
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289