请考虑以下两个功能,这些功能可以返回客户租借的电影数量。第二个重载了第一个,并且还有两个参数来指定影片的租借范围。
FUNCTION GetFilmCount(customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE)
RETURN INTEGER;
FUNCTION GetFilmCount(customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE, begin_date_in IN DATE, end_date_in IN DATE)
RETURN INTEGER;
为减少代码重复,我想从第一个调用第二个函数。对于 end_date_in ,我可以传递 SYSDATE ,但是有 Oracle 函数可以传递 begin_date_in 的最小日期( <>以下代码中的<>)而不查询 CUSTOMER 表?
FUNCTION GetFilmCount(customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE)
RETURN INTEGER IS
BEGIN
RETURN GetFilmCount(customer_id_in, <> ,SYSDATE);
END;
答案 0 :(得分:2)
使用NULL
表示“未定义”值,而不是一些幻数:
FUNCTION GetFilmCount(
customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE
)
RETURN INTEGER IS
BEGIN
RETURN GetFilmCount(customer_id_in, NULL ,SYSDATE);
END;
和
FUNCTION GetFilmCount(
customer_id_in IN CUSTOMER.CUSTOMER_ID%TYPE,
begin_date_in IN DATE,
end_date_in IN DATE
)
RETURN INTEGER IS
p_count NUMBER;
BEGIN
SELECT COUNT(*)
INTO p_count
FROM your_table
WHERE customer_id = customer_id_in
AND ( begin_date_in IS NULL OR begin_date_in <= your_date_column )
AND ( end_date_in IS NULL OR your_date_column <= end_date_in );
RETURN p_count;
END;
答案 1 :(得分:1)
Oracle中DATE变量的最小值是公元前4712年1月1日,因此以下内容将为您提供最大范围,包括SYSDATE:
RETURN GetFilmCount(customer_id_in, TO_DATE('01-Jan-4712 BC', 'DD-MON-YYYY BC'), SYSDATE);
好运。