PL / SQL过程DBMS_OBFUSCATION_TOOLKIT.MD5的异常功能行为

斯拉贾帕

我使用TOAD执行我的过程并运行我的PL / SQL脚本。

最近,我尝试在PL / SQL中使用dbms_obfuscation_toolkit.md5()函数来检索作为参数传递的字符串的加密文本。我发现,当我将函数作为单独的语句调用时,该函数会提供正确的结果。但是,当我通过SELECT查询调用它时,它不会响应相同的格式。

下面,我提到了这种特殊情况,并在TOAD应用程序中运行该结果后会显示结果。

--CASE:1 (Proper result is obtained here)
DECLARE
vinput  varchar2(255) := 'SRINI';
well    varchar2(50);
BEGIN
    WELL := DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>VINPUT);
    dbms_output.put_line(well);
END;

输出:Áýg¿Zq!Ù´¿Ke>ÏQ

--CASE:2 (Unexpected response is obtained here)
DECLARE
vinput  varchar2(255) := 'SRINI';
well    varchar2(50);
BEGIN
    SELECT DBMS_OBFUSCATION_TOOLKIT.MD5(VINPUT)
        INTO    WELL
    FROM    DUAL;    
    dbms_output.put_line(well);
END;

错误输出:ORA-06550:第5行,第37列:PLS-00307:太多的“ MD5”声明与此调用匹配ORA-06550:第5行,第12列:PL / SQL:ORA-00904:“ DBMS_OBFUSCATION_TOOLKIT”。 MD5“:无效的标识符ORA-06550:第5行,第5列:PL / SQL:忽略了SQL语句

即使结果在语法和语义上都是正确的,为什么结果仍存在这种差异?请提供您的意见和反馈。

文森特·马尔格拉特

您的函数调用在语法或语义上都不相同。如果像在SQL中那样在PL / SQL中调用该函数,则会得到相同的确切错误:

SQL> DECLARE
  2     vinput VARCHAR2(255) := 'SRINI';
  3     well   VARCHAR2(50);
  4  BEGIN
  5     WELL := DBMS_OBFUSCATION_TOOLKIT.MD5(vinput);
  6     dbms_output.put_line(well);
  7  END;
  8  /

ORA-06550: Ligne 5, colonne 12 :
PLS-00307: too many declarations of 'MD5' match this call

这是因为调用的函数在程序包中MD5重载DBMS_OBFUSCATION_TOOLKIT,您需要指定要确切调用的函数。

在Oracle 11g中,可以使用与PL / SQL相同的synthax:

SQL> DECLARE
  2     vinput VARCHAR2(255) := 'SRINI';
  3     well   VARCHAR2(50);
  4  BEGIN
  5     SELECT DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => VINPUT)
  6       INTO WELL FROM DUAL;
  7     dbms_output.put_line(well);
  8  END;
  9  /

Áýg¿Zq!Ù´¿Ke>ÏQ

PL/SQL procedure successfully completed

在11g之前,您可以定义包装函数:

SQL> CREATE OR REPLACE FUNCTION wrap_md5(input_string VARCHAR2)
  2     RETURN dbms_obfuscation_toolkit.varchar2_checksum
  3  IS
  4  BEGIN
  5     RETURN dbms_obfuscation_toolkit.md5(input_string => input_string);
  6  END;
  7  /

Function created

SQL> DECLARE
  2     vinput VARCHAR2(255) := 'SRINI';
  3     well   VARCHAR2(50);
  4  BEGIN
  5     SELECT wrap_md5(VINPUT)
  6       INTO WELL FROM DUAL;
  7     dbms_output.put_line(well);
  8  END;
  9  /

Áýg¿Zq!Ù´¿Ke>ÏQ

PL/SQL procedure successfully completed

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PL SQL过程dbms输出

来自分类Dev

PL / SQL异常

来自分类Dev

PL / SQL异常循环

来自分类Dev

Pl / SQL嵌套过程异常处理

来自分类Dev

PL / SQL,功能/过程开始处的条件

来自分类Dev

PL / SQL异常不会引发

来自分类Dev

PL / SQL引发处理的异常

来自分类Dev

将脚本转换为dbms_scheduler的PL / SQL过程

来自分类Dev

DES3加密:ruby openssl :: cipher与oracle dbms_obfuscation_toolkit

来自分类Dev

如何使用DBMS_OBFUSCATION_TOOLKIT.MD5将VARCHAR2哈希化为字母数字

来自分类Dev

找到数据时,PL SQL引发异常

来自分类Dev

PL / SQL包级别的异常处理

来自分类Dev

函数之间的PL \ SQL异常处理

来自分类Dev

PL / SQL插入新记录异常处理

来自分类Dev

PL/SQL 异常以什么顺序引发?

来自分类Dev

PL / SQL过程未编译

来自分类Dev

使PL / SQL存储过程在发生异常时回滚所有更改?

来自分类Dev

过程中带有PL / SQL中嵌套函数的异常处理

来自分类Dev

PL / SQL-如何检查程序包/过程/功能是否正在使用?

来自分类Dev

PL / SQL-如何检查程序包/过程/功能是否正在使用?

来自分类Dev

PL/SQL 过程。避免 SQL 重复

来自分类Dev

PL / SQL实现while循环PL:00103

来自分类Dev

PL / SQL异常处理-函数返回无值

来自分类Dev

如何处理pl / sql中的invalid_identifier异常?

来自分类Dev

如何捕获PL / SQL脚本中的所有异常?

来自分类Dev

如何处理pl / sql中的invalid_identifier异常?

来自分类Dev

PL / SQL异常处理-函数返回无值

来自分类Dev

未在预期的地方引发PL / SQL VALUE_ERROR异常

来自分类Dev

PL/SQL 函数 Oracle 中未处理异常