DBMS_CRYPTO 中hash_sh1变量的使用

看Tom写的<使用校验和的乐观锁定>过程中, 对文章举例的应用进行了试验.
begin
for x in (select a, age
 from test
 where a=1)
loop
    dbms_output.put_line('a:'||x.a);
    dbms_output.put_line('age:'||x.age);
    dbms_output.put_line('Hash:'|| DBMS_CRYPTO.hash(utl_raw.cast_to_raw(x.a), DBMS_CRYPTO.hash_sh1));
end loop;
end;
/

试验帐号具有DBA权限, 在在编译时会报ORA-00904: : 标识符无效,该错误时针对DBMS_CRYPTO包的,
执行:
SQL>  SELECT * FROM user_tab_privs WHERE table_name = 'DBMS_CRYPTO';
未选定行.
当前用户无权限执行该包, 需要切换用户进行授权:
SQL> grant execute on DBMS_CRYPTO to seasail;
授权成功。
再次执行:
SQL>  SELECT * FROM user_tab_privs WHERE table_name = 'DBMS_CRYPTO';

GRANTEE     OWNER      TABLE_NAME     GRANTO  RPRIVILEGE   GRA   HIE
----------- ---------- -------------  ------- -----------  ---   ----
SEASAIL     SYS        DBMS_CRYPTO    SYS     EXECUTE      NO    NO


SQL> select dbms_crypto.hash(utl_raw.cast_to_raw(10), dbms_crypto.hash_sh1)
  2  from dual;
select dbms_crypto.hash(utl_raw.cast_to_raw(10), dbms_crypto.hash_sh1)
                                                 *
第 1 行出现错误:
ORA-06553: PLS-221: 'HASH_SH1' 不是过程或尚未定义

从网上搜索了一把, 找到了一个德文的pdf, 但看不懂, 此外还有这个网址:
http://www.irclog.org/freenode/oracle/2006-08-01/page1.html
根据上面的信息把dbms_crypto.hash_sh1该为3, 则能执行成功.

SQL> select dbms_crypto.hash(utl_raw.cast_to_raw(10), 3) hash_value
  2  from dual;

HASH_VALUE
------------------------------------------------------------------------

B1D5781111D84F7B3FE45A0852E59758CD7A87E5 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值