身份验证 - PLS-00488:' VALIDATE_USER_FROM_DB'必须是ORA-06550

时间:2016-10-22 15:24:15

标签: sql oracle function authentication

我目前正在使用Oracle Application Express 5中的应用程序,更具体地说,我正在尝试创建自定义身份验证方案。

我首先在SQL命令窗口中创建一个函数,该函数将为我的应用程序提供基本级别的身份验证。我希望我的用户能够使用他们的个人学生参考编号(srn)和出生日期(dob)登录,这些信息来自表格"学生"。

create or replace function validate_user_from_db 
(p_username in number, p_password in date) 
return boolean 
as v_pw_check varchar2(1); 
begin select 'x' into v_pw_check 
from student 
where upper(srn) = upper(p_username) 
and dob = p_password; apex_util.set_authentication_result(0); 
return true; exception when no_data_found then apex_util.set_authentication_result(4); 
return false; 
end validate_user_from_db;

这个函数编译时没有错误,因此我继续创建一个简单的查询来测试函数。

declare
vresult varchar2(10);
begin
if validate_user_from_db ('30134852', '08/17/1997') then
DBMS_OUTPUT.PUT_LINE('Welcome Back'); 
else
DBMS_OUTPUT.PUT_LINE('Error');
end if;
end;

查询成功并正在输出"欢迎回来"何时填写正确的凭据。现在一切正常,我希望我开始创建一个新的身份验证方案。我将其命名为#34;用户验证"并将方案类型设置为自定义。

我一直在关注一个教程并研究认证方案,并建议在PL / SQL代码中放置一行,

return validate_user_from_db;

但是当我保存并编译它时,我收到了此错误消息。

Error Code

为了尝试解决此问题,我决定在PL / SQL代码窗口中编写以下函数,并且编译时没有任何问题,但是当我尝试运行应用程序并使用正确的登录凭据时,它只会出现错误消息说明"无效的登录凭证"。

function validate_user_from_db 
(p_username in number, p_password in date) 
return boolean 
as v_pw_check varchar2(1); 
begin select 'x' into v_pw_check 
from student 
where upper(srn) = upper(p_username) 
and dob = p_password; apex_util.set_authentication_result(0); 
return true; exception when no_data_found then apex_util.set_authentication_result(4); 
return false; 
end validate_user_from_db;

我们非常感谢任何帮助,因为这是我第一次使用Oracle Apex创建身份验证。

1 个答案:

答案 0 :(得分:0)

我在搞乱测试应用程序后解决了这个问题。根据您设置的身份验证方案,自动生成登录页面。确保在更改身份验证时删除现有登录页面。