我正在寻找帮助在SQL中复制Java的String.hashCode()函数。它计算如下:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
我可以使用java程序轻松完成,但我有很多CLOB需要处理,我在想(也许是错误的?)更新将在服务器上运行得更快,而不会处理网络开销。有人有这样的功能吗?
有些要求是:
它也不必使用java hashCode(),它可以使用不同的哈希算法,如MD5SUM,如果它更容易做到的话。我将需要更新大约一百万条记录,并将使用散列来指示源文档(或转换过程)是否会导致更改的文档。
答案 0 :(得分:0)
我在Oracle中发现了ora_hash(),但它看起来只是查看文档的第一个4K。相反,我正在使用:
CREATE OR REPLACE FUNCTION get_md5sum_clob_fn( i_clob IN CLOB)
RETURN RAW
IS
BEGIN
RETURN
DBMS_CRYPTO.HASH
(
src => i_clob,
typ => DBMS_CRYPTO.HASH_MD5
);
END;
我也只给出这个非空的CLOB,否则会出错。它受到一些限制:
所以我还没有接受我自己的答案。我很乐意看到一个独立于数据库的解决方案。