创建一个函数来检查表中是否存在两个项目

时间:2013-05-23 19:08:04

标签: sql database oracle plsql

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

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

1 个答案:

答案 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'表示找到了员工,但密码不匹配。