0

我目前正在处理此代码以检查员工的状态,并且我想创建一个新的登录功能:

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'。我很困惑如何在我的代码中实现最后两个返回。任何帮助都会很棒!

4

1 回答 1

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”以指示找到该员工,但密码不匹配。

于 2013-05-23T20:22:40.753 回答