Хеш-данные Oracle по строкам - PullRequest
2 голосов
/ 01 июля 2011

Предположим, у меня есть таблица оракула с двумя столбцами: тип varchar2 и data varchar2.Я хочу знать, есть ли в plsql или прямом oracle sql какой-то эффективный способ вычислить хеш для всех столбцов данных (в идеале sha1, но приемлемы md5 или пользовательские хэш-функции oracle).Например, реализация решения mysql может выглядеть следующим образом:

mysql dialect query:
select type, sha1(group_concat(data order by data separator '')) data_hash from my_table group by type

example output:    
+------+------------------------------------------+
| type | data_hash                                |
+------+------------------------------------------+
| a    | dbe343bfc23545c72f11fc7d2433df3263a71d0d |
| b    | b2baee034a7ed3aa1fa1bd441e141909f1b2f57c |
+------+------------------------------------------+

Я бы предпочел прямой запрос, а не итерацию курсора, а sha1 - другим хэшам.

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

Вы можете попробовать

SELECT type, SUM(ORA_HASH(data)) FROM my_table GROUP BY type

У Oracle действительно есть COLLECT, но он не работает с ORA_HASH.В 11 г вы можете сделать

select deptno, ora_hash(listagg(ename) within group (order by ename))
from emp
group by deptno
0 голосов
/ 01 июля 2011

Смотрите мой ответ для функции getMD5 здесь . Также посмотрите на DBMS_CRYPTO , как уже упоминалось, здесь используется более старый набор инструментов для запутывания, но подход тот же.

Чтобы сделать ваши обновления, что-то вроде:

update my_table
set my_hash = getMD5(col1 || col2 || col3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...