如何在数据类型为xmltype的列上使用ora_hash [英] How to use ora_hash on a column of datatype xmltype

查看:77
本文介绍了如何在数据类型为xmltype的列上使用ora_hash的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对xmltype数据类型使用ORA_HASH,而解决方法是直接的解决方案?

I would like to use ORA_HASH on xmltype datatype, and workarounds are straight forward solutions ?

我正在使用oracle 11g r2和二进制xml作为xmltype列的存储选项

I am using oracle 11g r2 and binary xml as storage option for xmltype column

用于创建表的查询是

create table samplebinary ( indexid number(19,0) , xmlcolumn xmltype not null) xmltype column xmlcolumn store as binary xml;

推荐答案

您已经知道,

As you already know, ora_hash doesn't accept long or LOB values. You could pass in the first 4k or 32k of the XML content, but if you need to make sure that the entire XML document hasn't changed, that won't be sufficient. And as Ben mentioned, ora_hash has a maximum of 4294967295 buckets, so collisions are rather more likely than with SHA-1 or MD5. As the documentation says, ora_hash 'is useful for operations such as analyzing a subset of data and generating a random sample'.

您可以使用 dbms_crypto软件包散列整个XMLType值,例如使用 getClobVal函数,具有包装函数,使使用起来更简单:

You can use the dbms_crypto package to hash the whole XMLType value, as a CLOB extracted with the getClobVal function, with a wrapper function to make it simpler to use:

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的一部分进行传递:

You can then pass in your XMLType, as a value or as a column as part of a select:

select my_hash(xml) from t42;

MY_HASH(XML)                                 
---------------------------------------------
494C4E7688963BCF312B709B33CD1B5CCA7C0289     

这篇关于如何在数据类型为xmltype的列上使用ora_hash的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆