oracle md5如何调用

本文详细介绍了 Oracle 数据库中 sys.dbms_obfuscation_toolkit.md5 的使用方法,包括直接调用、通过函数调用的方式及不同应用场景的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:11g
准备知识:
用到了sys.dbms_obfuscation_toolkit.md5
看源码定义:

    SUBTYPE varchar2_checksum IS VARCHAR2(16);
    SUBTYPE raw_checksum IS RAW(16);
    PROCEDURE MD5(input    IN  RAW,
                  checksum OUT raw_checksum);

    FUNCTION MD5(input    IN  RAW)
        RETURN raw_checksum;

    PROCEDURE MD5(input_string    IN     VARCHAR2,
                  checksum_string    OUT varchar2_checksum);

    FUNCTION MD5(input_string    IN     VARCHAR2)
        RETURN varchar2_checksum;

这里subtype是什么?

--SUBTYPE 主要是定义一个变量类型,方便批量修改
--也可以自定义范围


DECLARE
  -- 定义一个 rate 数据类型,它的父类型是 NUMBER
  -- rate 是 NUMBER(6, 4) 的另一个名字,和 NUMBER(6, 4) 没有任何区别
  SUBTYPE type1 IS NUMBER(6, 4);
  
  -- 定义一个 test 数据类型,不允许 NULL 值
  SUBTYPE type2 IS NUMBER(3, 1) NOT NULL;
  v_1 type2:=13;
  -- 定义一个 test2 数据类型,它的值得范围是 -100 到 100
  SUBTYPE type3 IS PLS_INTEGER RANGE -100..100;
  v_2 type3;
BEGIN
 v_2:=101;  
 null;
END;
/

开始调用:
方式1:直接调用

  drop table   md5_tab;
  create table md5_tab(md5 varchar2(32),name varchar2(10)); 
 --直接调用
 select utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => 'ysy')) from dual;
 
 --直接插入 
 insert into md5_tab(md5) values(utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => 'ysy')));   
 
 --直接更新
 update md5_tab aa set aa.md5=utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => md5));  

方式2:函数调用

1.外面创建函数
  create or replace function md5(input varchar2)
    return varchar2 as
  begin
    return  lower(utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => input)));
  end; 

--  可直接作用于sql上面.没问题
begin
  update md5_tab aa set aa.md5=md5('ysy');
end;

  
2.如果只是临时使用怎么处理  
-- md5默认32位
declare
  v_md varchar2(32);
  function md5(input varchar2)
    return varchar2 as
  begin
    return  utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => input));
  end; 
 
begin
  --pragma inline(f, 'YES'); 
  --需要用一个临时变量接受局部函数的值,因为局部函数无法直接使用在sql上面
  v_md:=md5('ysy');
  update md5_tab aa set aa.md5=v_md;
end;



--如果要批量更新呢,用一个变量接受就不太合适了
--因为局部函数无法直接使用在sql上面
--所以只能使用在外面定义的函数
declare

begin
  --报错   PLS-00231: 函数 'MD5' 不能在 SQL 中使用
  --select md5('ysy') into v_md from dual;
  --这里可结合for循环使用
   update md5_tab aa set aa.md5=utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => md5)),   
   aa.name='aa';
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值