2

我想在 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;

4

1 回答 1

7

如您所知,ora_hash不接受long或 LOB 值。您可以传入前 4k 或 32k 的 XML 内容,但如果您需要确保整个 XML 文档没有更改,那是不够的。正如 Ben 提到的,ora_hash最多有 4294967295 个桶,因此与 SHA-1 或 MD5 相比,冲突更有可能发生。正如文档所说,ora_hash“对于分析数据子集和生成随机样本等操作很有用”。

您可以使用dbms_crypto来散列整个 XMLType 值,作为使用function提取getClobValCLOB ,并使用包装器函数使其更易于使用:

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     
于 2014-04-23T07:33:15.790 回答