我正在将一个员工编号传递给一个函数并返回加入日期。
我希望在找不到匹配的记录时返回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;
答案 0 :(得分:5)
如果未找到匹配的记录,则会引发NO_DATA_FOUND异常;你必须捕获这个异常并返回一些东西。
您还要检查v_join_date
是否为null,然后如果它为null则为其分配空值;没有必要这样做。
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 ) ...
答案 1 :(得分: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