2016-10-22 429 views
0

我目前正在研究Oracle Application Express 5中的应用程序,更具体地说,我正尝试创建自定义身份验证方案。身份验证 - PLS-00488:'VALIDATE_USER_FROM_DB'必须是一个类型ORA-06550

我通过在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; 

查询成功,并且在填写正确凭证时输出“Welcome Back”。现在一切正常,我希望如何创建一个新的身份验证方案。我将其命名为“用户验证”并将方案类型设置为自定义。

我一直在下面的教程和研究为身份验证方案,并建议,在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创建身份验证。

+0

'return validate_user_from_db;' - 你错过了函数的参数。另外,你不应该依赖隐含的字符串 - >日期转换:提供'08/17/1997'作为日期输入值将失败,除非你使用美国NLS设置。以明确的日期格式使用to_char(),或使用接受ISO格式日期的'date'运算符,例如'日期'2016-08-17'' –

回答

0

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