Как использовать ora_hash для столбца типа данных xmltype

Я хотел бы использовать ORA_HASH для типа данных xmltype, и обходные пути являются прямыми решениями?

Я использую оракул 11g r2 и двоичный XML как вариант хранения для столбца xmltype

Запрос, который я использовал для создания таблицы - это

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

1 ответ

Решение

Как ты уже знаешь, ora_hash не принимает long или значения LOB. Вы можете передать первые 4 или 32 тысячи XML-содержимого, но если вам необходимо убедиться, что весь XML-документ не изменился, этого будет недостаточно. И, как упоминал Бен,ora_hashимеет максимум 4294967295 сегментов, поэтому вероятность столкновений выше, чем с SHA-1 или MD5. Как сказано в документации,ora_hash"полезен для таких операций, как анализ подмножества данных и генерация случайной выборки".

Вы можете использоватьdbms_crypto пакет для хэширования всего значения XMLType, как CLOB, извлеченный с getClobVal функция, с функцией-оболочкой, чтобы упростить использование:

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     
Другие вопросы по тегам