OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案

因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了 dbms_crypto.hash,其用法详见这篇 KB

但是,并不是所有业务都接受修改源码,因为复杂系统里,涉及到的修改点可能无法枚举。

这里提供一种临时解决方案:使用 OceanBase PL/SQL 实现一个 dbms_obfuscation_toolkit.md5 系统包,源码如下:

sql 复制代码
## 创建包 DBMS_OBFUSCATION_TOOLKIT 
CREATE OR REPLACE PACKAGE DBMS_OBFUSCATION_TOOLKIT
    IS
        FUNCTION MD5(input_string VARCHAR2)
          RETURN varchar2;
    END DBMS_OBFUSCATION_TOOLKIT;
/

## 创建包体 DBMS_OBFUSCATION_TOOLKIT
CREATE OR REPLACE PACKAGE BODY DBMS_OBFUSCATION_TOOLKIT
 IS 
    FUNCTION MD5(input_string VARCHAR2)
        RETURN varchar2
        IS 
    BEGIN
        RETURN UTL_RAW.CAST_TO_VARCHAR2(dbms_crypto.hash(utl_raw.cast_to_raw(input_string), 2));
    END MD5;
END DBMS_OBFUSCATION_TOOLKIT;
/

测试效果如下:

sql 复制代码
OceanBase(TEST@TEST)>SELECT rawtohex(dbms_crypto.hash(utl_raw.cast_to_raw('hello world'),2 /*dbms_crypto.HASH_MD5*/)) md5 FROM dual;
+----------------------------------+
| MD5                              |
+----------------------------------+
| 5EB63BBBE01EEED093CB22BB8F5ACDC3 |
+----------------------------------+
1 row in set (0.000 sec)

OceanBase(TEST@TEST)>SELECT utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5(input_string => 'hello world')) md5 FROM dual;
+----------------------------------+
| MD5                              |
+----------------------------------+
| 5EB63BBBE01EEED093CB22BB8F5ACDC3 |
+----------------------------------+
1 row in set (0.039 sec)

可见,上述 PL 代码完全实现了相关功能。

这个思路可以延伸到很多缺 PL 包的场景,我们很多时候可以使用自定义的 PL 包来模拟缺失的内容。当然,这个主要集中在计算领域,如果是要做一些网络 IO,就麻烦很多,比如 HTTP 相关的包,就很难模拟。

相关推荐
OceanBase数据库官方博客16 小时前
在OceanBase 中,实现自增列的4种方法
oceanbase·分布式数据库·运维管理
OceanBase数据库官方博客3 天前
OceanBase中,如何解读 obdiag 收集的火焰图 【DBA早下班系列】
oceanbase·分布式数据库·运维管理
OceanBase数据库官方博客7 天前
从1000s到10s,OceanBase 标量子查询的SQL优化实践
oceanbase·分布式数据库·sql优化
OceanBase数据库官方博客7 天前
客如云:大型业务报表的分区化改造提升性能|OceanBase 应用实践
数据分析·oceanbase·分布式数据库·实践经验
大数据在线7 天前
乘云而上,OceanBase再越山峰
阿里云·oceanbase·分布式数据库·aws·云数据库
OceanBase数据库官方博客10 天前
阳振坤:云时代数据库的思考 | OceanBase发布会实录
oceanbase·分布式数据库·年度发布会
RestCloud10 天前
OceanBase数据库结合ETLCloud快速实现数据集成
数据库·oceanbase·etl·分布式存储·数据集成·数据传输
OceanBase数据库官方博客10 天前
云+AI 时代的 OceanBase
oceanbase·分布式数据库·1024程序员节·年度发布会
筱筱打工人10 天前
DBerver 连接oceanBase 配置
oceanbase
不叫猫先生10 天前
【OceanBase探会】云与 AI 赋能一体化数据库的创新之旅
数据库·ai·oceanbase·1024程序员节