我目前正在研究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;
但是当我保存并编译它,我得到这个错误信息。
在试图尝试解决这个问题,我决定写在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创建身份验证。
'return validate_user_from_db;' - 你错过了函数的参数。另外,你不应该依赖隐含的字符串 - >日期转换:提供'08/17/1997'作为日期输入值将失败,除非你使用美国NLS设置。以明确的日期格式使用to_char(),或使用接受ISO格式日期的'date'运算符,例如'日期'2016-08-17'' –