【问题标题】:Creating a function to check if two items exists in the table together创建一个函数来检查表中是否同时存在两个项目
【发布时间】:2013-05-23 19:08:03
【问题描述】:

我目前正在编写这段代码来检查员工的状态,我想创建一个新的登录功能:

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

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案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”表示找到了员工,但密码不匹配。

    【讨论】:

    • OT:很高兴知道 - 当然 - 这不是存储的实际密码,而是一些好的哈希值......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多