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

Posted

技术标签:

【中文标题】创建一个函数来检查表中是不是同时存在两个项目【英文标题】: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'。 我很困惑如何在我的代码中实现最后两个返回。任何帮助都会很棒!

【问题讨论】:

【参考方案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:很高兴知道 - 当然 - 这不是存储的实际密码,而是一些好的哈希值......

以上是关于创建一个函数来检查表中是不是同时存在两个项目的主要内容,如果未能解决你的问题,请参考以下文章

SQL 连接两个表并检查两个表中的每个值是不是存在

检查数组 React 中是不是存在项目

`错误:不平衡括号`同时检查项目是不是存在于熊猫数据框中

通过 jquery 检查项目是不是存在于特定的 <td> 中

如何检查一个项目是不是存在于动态数组中?

在 MSSQL 中更新之前检查是不是存在唯一值