Oracle PL/SQL中有哈希函数吗?

Oracle PL/SQL中有哈希函数吗?,oracle,hash,plsql,oracle-sqldeveloper,Oracle,Hash,Plsql,Oracle Sqldeveloper,我正在寻找PL/SQL中的散列函数,以获取varchar的散列。我在Oracle10中发现了一个名为dbms_crypto的包,其中有一个函数dbms_crypto.hash,甚至还有其他包dbms_sqlhash.getHash,但是在我调用它们的地方,我得到了一条消息,好像它找不到它们 有人知道我怎么称呼他们吗??还有别的包裹吗 这是我的密码 DECLARE l_textToHash VARCHAR2(19) := 'toto123'; l_ccn_raw RAW(128) := utl

我正在寻找PL/SQL中的散列函数,以获取varchar的散列。我在Oracle10中发现了一个名为dbms_crypto的包,其中有一个函数dbms_crypto.hash,甚至还有其他包dbms_sqlhash.getHash,但是在我调用它们的地方,我得到了一条消息,好像它找不到它们

有人知道我怎么称呼他们吗??还有别的包裹吗

这是我的密码

DECLARE
 l_textToHash VARCHAR2(19) := 'toto123';
 l_ccn_raw RAW(128) := utl_raw.cast_to_raw(l_textToHash);
 l_encrypted_raw RAW(2048);
BEGIN
  dbms_output.put_line('CC:  ' || l_ccn_raw);
  l_encrypted_raw := dbms_crypto.hash(l_ccn_raw, 3);
  dbms_output.put_line('SH1: ' || l_encrypted_raw);
END;
/
这是留言

Error starting at line 1 in command:
DECLARE
 l_textToHash VARCHAR2(19) := 'toto123';
 l_ccn_raw RAW(128) := utl_raw.cast_to_raw(l_textToHash);
 l_encrypted_raw RAW(2048);
BEGIN
  dbms_output.put_line('CC:  ' || l_ccn_raw);
  l_encrypted_raw := dbms_crypto.hash(l_ccn_raw, 3);
  dbms_output.put_line('SH1: ' || l_encrypted_raw);
END;
Error report:
ORA-06550: line 7, column 22:
PLS-00201: identifier 'DBMS_CRYPTO' must be declared
ORA-06550: line 7, column 3:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

谢谢

确保您已将适当的权限授予正在连接的用户。与您的DBA交谈,在SYS.DBMS_CRYPTO包上添加执行权限

Oracle提供了一个使用Oracle数据库处理哈希和加密数据的好方法

如果您使用的是不支持DBMS_CRYPTO的旧版本数据库,也可以尝试使用DBMS_模糊处理_工具包


在Oracle 12c中,您可以使用该函数。

根据您试图生成哈希的原因,内置函数ORA_hash可能就足够了

SQL> select ora_hash( 'fuzzy bunny' ) from dual;

ORA_HASH('FUZZYBUNNY')
----------------------
            2519249214

如果您需要一个加密安全的哈希函数,我不会尝试使用它。但如果您只需要一个简单的散列,这就足够了。

您能描述一下吗?:desc dbms\u crypto;将由SYSHi所有,是的,实际上这就是问题所在,架构师没有给我权限,谢谢!!我已经尝试过这个功能;但这并不是我想要的,问题是因为权限问题,我没有访问该库。不幸的是,内置函数ORA_HASH可用于SQL,但不适用于PL/SQL。如果我们希望从PL/SQL调用它(至少在Oracle 10g中),则需要使用类似SELECT ORA_HASH(DATA)INTO variable FROM DUAL的东西.据我所知,
ORA_HASH
不是术语正确意义上的
HASH函数
;使用完全相同参数的不同调用不会返回相同的值。相反,
ORA_HASH
似乎会随机(且不可重复)将输入分配给存储桶。@mathguy-你有这样的测试用例吗?我刚刚重新运行了6年前的查询,今天它在一个与6年前不同的数据库中返回了相同的结果……并且更仔细地查看了文档:对于Oracle 10.1,他们说“对于expr表示的数据的类型或长度没有限制。”11.1的文档说的完全相同,但随后它立即补充道:expr不能是
LONG
LOB
类型。