如何在plsql中获取去年的开始日期和结束日期
我有一个带有三个参数的plsql函数如何在plsql中获取去年的开始日期和结束日期,plsql,oracle-apex,Plsql,Oracle Apex,我有一个带有三个参数的plsql函数count\u order\u cust。但是p_开始和p_结束是可选的。如果我用三个参数调用函数,那么函数执行得很好,但是如果我用一个参数调用函数p_id,那么它必须统计去年(即2013年1月1日-2013年12月31日)的订单,这就是我的问题。我该怎么做 下面是函数计数\u订单\u客户: CREATE OR REPLACE FUNCTION count_order_cust(p_id f_customers.id%TYPE, p_sd f_orders.o
count\u order\u cust
。但是p_开始
和p_结束
是可选的。如果我用三个参数调用函数,那么函数执行得很好,但是如果我用一个参数调用函数p_id
,那么它必须统计去年(即2013年1月1日-2013年12月31日)的订单,这就是我的问题。我该怎么做
下面是函数计数\u订单\u客户
:
CREATE OR REPLACE FUNCTION count_order_cust(p_id f_customers.id%TYPE, p_sd f_orders.order_date%TYPE DEFAULT NULL, p_ed f_orders.order_date%TYPE DEFAULT NULL)
RETURN NUMBER IS v_count_orders NUMBER(3) := 0;
BEGIN
SELECT COUNT(cust_id) INTO v_count_orders
FROM f_orders
WHERE cust_id = p_id AND f_orders.order_date BETWEEN p_sd AND p_ed;
RETURN v_count_orders;
EXCEPTION WHEN NO_DATA_FOUND THEN RETURN NULL;
END count_order_cust;
通过这个选择,我得到了去年的日期,但我需要在p_sd='01/Jan/2013'和p_ed='31/Dec/2013'中得到
select add_months(sysdate,-12) from dual;
下面的代码向您展示了如何派生所需的日期,然后将代码绑定到可以用作过程默认参数的函数中:
declare
function getFirstDayOfLastYear return date is
begin
return trunc(add_months(sysdate,-12),'YEAR');
end;
function getLastDayOfLastYear return date is
begin
return trunc(sysdate,'YEAR') - 1;
end;
procedure myProc(
p_start date default getFirstDayOfLastYear,
p_end date default getLastDayOfLastYear
) is
begin
dbms_output.put_line(p_start);
dbms_output.put_line(p_end);
end;
begin
myProc;
end;