创建一个函数来检查表中是不是同时存在两个项目
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:很高兴知道 - 当然 - 这不是存储的实际密码,而是一些好的哈希值......以上是关于创建一个函数来检查表中是不是同时存在两个项目的主要内容,如果未能解决你的问题,请参考以下文章