Как использовать 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