我目前正在处理此代码以检查员工的状态,并且我想创建一个新的登录功能:
create or replace FUNCTION get_status_by_employee_id
(
p_employee_id NUMBER
) RETURN CHAR
AS
v_status employee.status%TYPE;
BEGIN
SELECT status
INTO v_status
FROM employee
WHERE employee_id = p_employee_id;
return v_status;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return 'N';
END get_status_by_employee_id;
员工登录的新功能:
CREATE OR REPLACE FUNCTION employee_login
(
p_employee_id NUMBER,
p_password VARCHAR2
) RETURN CHAR
AS
BEGIN
SELECT employee_id, password
FROM employee
WHERE employee_id = p_employee_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
return 'N';
END employee_login;
示例测试将是: SELECT employee_login(2002,'frw234r')
Employee_Login(2002, 'frw234r')
-------------------------------------
F
就像我上面的第一个函数一样,如果employee_id不在表中,我想返回'N'。如果employee_id的值在employee表中,但与p_password不匹配,我想返回'F'。最后,如果employee_id和p_password匹配,我想返回'Y'。 我很困惑如何在我的代码中实现最后两次返回。任何帮助都会很棒!
答案 0 :(得分:1)
以下功能应符合您的标准。
CREATE OR REPLACE FUNCTION employee_login(p_employee_id NUMBER,
p_password VARCHAR2
) RETURN CHAR
IS
l_password VARCHAR2(20);
BEGIN
SELECT password
INTO l_password
FROM employee
WHERE employee_id = p_employee_id;
IF l_password = p_password THEN
return 'Y';
END IF;
return 'F';
EXCEPTION
WHEN NO_DATA_FOUND THEN
return 'N';
END employee_login;
基本上,如果没有抛出NO_DATA_FOUND异常,我们会将您传入的密码与从表中检索到的密码进行比较。如果匹配,我们返回'Y'。否则我们返回'F'表示找到了员工,但密码不匹配。