需要在自定义函数返回值的地方,增加关键字:DETERMINISTIC


原来的函数:

CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)RETURN VARCHAR2
IS
    retval varchar2(32);
BEGIN
    IF LENGTHB(passwd)>0 THEN
    retval := LOWER(utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd))) ;
    RETURN retval;
    ELSE
    RETURN passwd;
  END IF;
END;

修改后:


CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)RETURN VARCHAR2 DETERMINISTIC
IS
    retval varchar2(32);
BEGIN
    IF LENGTHB(passwd)>0 THEN
    retval := LOWER(utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd))) ;
    RETURN retval;
    ELSE
    RETURN passwd;
  END IF;
END;