作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个函数来从我在这里和那里收集的位中获取 MD5 哈希值。我想获得散列的小写十六进制表示。到目前为止我有这个:
CREATE OR REPLACE FUNCTION MD5 (
CADENA IN VARCHAR2
) RETURN DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM
AS
BEGIN
RETURN LOWER(
RAWTOHEX(
UTL_RAW.CAST_TO_RAW(
DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => CADENA)
)
)
);
END;
DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM
看起来是合适的选择,据我所知它按预期工作,但 SQL Developer 显示的
dbms_obfuscation_toolkit
包定义显示了这一点:
SUBTYPE varchar2_checksum IS VARCHAR2(16);
RETURN
语句的正确类型是什么? 最佳答案
不能限制存储过程参数和函数返回类型是 Oracle PL/SQL 的一个特性。也就是说,我们不能有这样一个签名的过程:
SQL> create or replace procedure my_proc (p1 in varchar2(30))
2 is
3 begin
4 null;
5 end;
6 /
Warning: Procedure created with compilation errors.
SQL> show error
Errors for PROCEDURE MY_PROC:
LINE/COL ERROR
-------- -----------------------------------------------------------------
1/34 PLS-00103: Encountered the symbol "(" when expecting one of the
following:
:= . ) , @ % default character
The symbol ":=" was substituted for "(" to continue.
SQL> create or replace procedure my_proc (p1 in varchar2)
2 is
3 begin
4 null;
5 end;
6 /
Procedure created.
SQL>
SQL> create or replace package my_subtypes as
2 subtype ltd_string is varchar2(30);
3 end;
4 /
Package created.
SQL> create or replace function my_func return my_subtypes.ltd_string
2 is
3 begin
4 return lpad('a', 4000, 'a');
5 end;
6 /
Function created.
SQL> select length(my_func) from dual
2 /
LENGTH(MY_FUNC)
---------------
4000
SQL>
DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM
确信它不会阻止您的函数返回 32 个字符。
SQL> declare
2 v my_subtypes.ltd_string;
3 begin
4 v := my_func;
5 end;
6 /
declare
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 4
SQL>
关于oracle - Oracle 中的 MD5 (DBMS_OBFUSCATION_TOOLKIT.MD5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5897438/
我正在尝试编写一个函数来从我在这里和那里收集的位中获取 MD5 哈希值。我想获得散列的小写十六进制表示。到目前为止我有这个: CREATE OR REPLACE FUNCTION MD5 (
捕获 SQLException::java.sql.SQLException:ORA-29532:Java 调用因未捕获的 Java 异常而终止:java.sql.SQLException:无法获取服
我有 3 个变量名称、密码、邮件。我想像使用 MD5 的名称-密码-邮件一样对它们进行哈希处理。当我使用这段代码时: SELECT sys.DBMS_OBFUSCATION_TOOLKIT.MD5(I
我有一个用 PL/SQL 编写的遗留应用程序,它使用 3DES 加密和解密数据。现在我需要从 ruby 应用程序执行类似的加密。最终生成的散列将需要由同一个 PL/SQL 应用程序使用其现有算法解
我是一名优秀的程序员,十分优秀!