Hash функция от CLOB'а дает разные значения. Часто возникает необходимость сравнить два значения. Их можно просто приравнять. Но если это текст, особенно, длинный текст, особенно, хранимый вне базы, то хотелось бы сравнивать не сам исходный материал, а какой-то компактный слепок с него. Равны слепки, - вероятно, равны и оригиналы. Для этого существуют hash функции, вычисляющие конечно-мерное число по произвольной длины аргументу. И наиболее очевидная из них это функция ora_hash(): with tab as
(
select 'Very long text' as txt from dual
union all
select 'Very long text' as txt from dual
)
select txt, ora_hash(txt) from tab
;
Very long text 1372671261
Very long text 1372671261 Здорово! Hash одинаковый, - аргумент, вероятно, тоже одинаковый; наоборот, - соответственно, наоборот. И всё так, пока текст не станет действительно большим и его не придется хранить/представлять в виде CLOB: with tab as
(
select to_clob('Very long text') as txt from dual
union all
select to_clob('Very long text') a