2012-03-29 52 views
2

我知道有一个函数可以从Oracle中的varchar中获取散列值,但是当我运行查询来查看返回的值时,它会发送以下消息。Oracle中的散列字符串

ORA-00904: : identificador no válido 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
Error en la línea: 70, columna: 7 

我在做什么是以下几点:

select DBMS_CRYPTO.hash(utl_raw.cast_to_raw('Foo'), 3) FROM dual; 

它应该返回SHA-1的字符串。

+0

实际的答案在这里:https://dba.stackexchange.com/q/56658/23369。 (对于Oracle而言,heck是错误的) – jpmc26 2017-09-28 23:38:50

回答

3

这对我的作品

SQL> select DBMS_CRYPTO.hash(utl_raw.cast_to_raw('Foo'), 3) FROM dual; 

DBMS_CRYPTO.HASH(UTL_RAW.CAST_TO_RAW('FOO'),3) 
-------------------------------------------------------------------------------- 
201A6B3053CC1422D2C3670B62616221D2290929 

你确定运行此用户已经被授予两个UTL_RAWDBMS_CRYPTOEXECUTE访问?如果您的代码的第70行是这样的SELECT声明,我打赌第7列是DBMS_CRYPTO呼叫开始的位置,并且您无权访问DBMS_CRYPTO程序包。

+0

对于UTL_RAW,我确定它具有访问权限,因为如果我运行'从双选择utl_raw.cast_to_raw('Foo');'它确实返回一个值。对于DBMS_CRYPTO,我并不完全确定,但是如果我执行'select * from ALL_OBJECTS A WHERE A.OBJECT_TYPE ='PACKAGE';'出现这个包,所以我想我可以访问 – BRabbit27 2012-03-29 16:23:25

+1

@ BRabbit27 - 如果语句在添加打电话给DBMS_CRYPTO,这似乎是一个公平的赌注,这是对DBMS_CRYPTO的调用导致您的'无效标识符'错误。 – 2012-03-29 16:34:46

+0

我会用我的DBA检查一下,非常感谢! – BRabbit27 2012-03-29 16:40:25