假设我有一个包含两列的oracle表:type 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优先于其他哈希。
答案 0 :(得分:2)
你可以尝试
SELECT type, SUM(ORA_HASH(data)) FROM my_table GROUP BY type
Oracle确实有一个COLLECT,但这不适用于ORA_HASH。在11g你可以做
select deptno, ora_hash(listagg(ename) within group (order by ename))
from emp
group by deptno
答案 1 :(得分:0)
请参阅我对getMD5函数here的回答。另外看一下其他人提到的DBMS_CRYPTO,它使用了较旧的混淆工具包,但方法是相同的。
进行更新,例如:
update my_table
set my_hash = getMD5(col1 || col2 || col3);