未找到匹配记录时返回 NULL
Posted
技术标签:
【中文标题】未找到匹配记录时返回 NULL【英文标题】:Return NULL when no matching records are found 【发布时间】:2013-09-03 07:05:53 【问题描述】:我将员工编号传递给函数并返回加入日期。
当没有找到匹配的记录时,我希望它返回 NULL;就我而言,它只是返回空白或空行;
get_join_date(in_emp_no)
CREATE OR REPLACE FUNCTION get_join_date(in_emp_no) RETURN DATE IS
v_join_date DATE;
BEGIN
SELECT joined_date
INTO v_date
FROM employee
WHERE employee_number = in_emp_no
AND type = in_type;
IF v_join_date IS NOT NULL THEN
v_join_date := v_date;
ELSE
v_join_date = NULL;
END IF;
RETURN v_join_date;
END;
【问题讨论】:
每次想要获取数据时都运行 select 并不是最好的主意。创建集合,填充它,然后从集合中获取值。集合是基于会话级别的,因此您可以从任何地方访问它... 【参考方案1】:如果没有找到匹配的记录,则会引发 NO_DATA_FOUND 异常;你必须捕获这个异常并返回一些东西。
您还要检查v_join_date
是否为空,如果为空,则为其分配一个空值;没有必要这样做。
create or replace function get_join_date(
Pemp_no in number
) return date is
l_join_date date;
begin
select joined_date into l_join_date
from employee
where employee_number = Pemp_no
and type = in_type;
return l_join_date;
exception when no_data_found then
return null;
end;
其他错误包括:
-
您正在选择
v_date
,但您将变量声明为v_join_date
end
语句后没有分号。
endif
语句后没有分号。
endif
是两个字,应该是end if;
您没有声明您需要的参数in_emp_no
的数据类型(但不是长度),例如... function get_join_date ( Pemp_no number ) ...
【讨论】:
【参考方案2】:当您想要返回一个现有值或 null 时,您可以简单地使用聚合函数,例如MIN,为此:
CREATE OR REPLACE FUNCTION get_join_date( in_emp_no) RETURN DATE
IS
v_join_DATE DATE;
BEGIN
SELECT MIN(JOINED_DATE)
INTO v_join_DATE
FROM employee
WHERE employee_number = in_emp_no
AND TYPE=in_type;
return v_join_DATE;
end
【讨论】:
以上是关于未找到匹配记录时返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章
当未找到结果时,其中 First() 似乎返回 null 的 Linq 查询
未找到记录时,mysqli_query 不返回 false [重复]