oracle apex登录页面中的自定义身份验证

时间:2020-05-08 12:18:32

标签: oracle oracle-apex oracle-apex-5

代码中的自定义身份验证不起作用。你能帮我解决这个问题吗?

这是我使用的代码:

create or replace function "MY_AUTHENTICATION"
    (p_username in VARCHAR2,
    p_password in VARCHAR2)
    return BOOLEAN
    is
        l_user sign_up.user_name%type := upper(p_username);
        l_id   sign_up.user_name%type;
        l_hash sign_up.set_password%type;
        begin     
            select user_name, set_password 
             into l_id, l_hash
             from sign_up
             where user_name = l_user and set_password = l_hash;
end;

和相同的过程,但是显示以下错误enter image description here

1 个答案:

答案 0 :(得分:1)

NO_DATA_FOUND表示您在表中找不到匹配的行。因此,请在EXCEPTION处理部分进行处理。

顺便说一句,即使您没有遇到该错误,您也会遇到另一个错误:函数必须返回一些值;在任何情况下您都不会。

CREATE OR REPLACE FUNCTION MY_AUTHENTICATION (p_username  IN VARCHAR2,
                                              p_password  IN VARCHAR2)
   RETURN BOOLEAN
IS
   l_user  sign_up.user_name%TYPE := UPPER (p_username);
   l_id    sign_up.user_name%TYPE;
   l_hash  sign_up.set_password%TYPE;
BEGIN
   SELECT user_name, set_password
     INTO l_id, l_hash
     FROM sign_up
    WHERE     user_name = l_user
          AND set_password = p_password; -- not l_hash!

   RETURN TRUE;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      RETURN FALSE;
END;