--编写一个存储过程,输入一个日期,判定其距离年底还有多少天
create or replace procedure sp_end(i_date varchar2,o_end out varchar2)
is
--声明两个变量,v_end存放经过转化的年底日期,v_errm用来存放异常
v_end date;
v_errm varchar2(50);
begin
if length(i_date)<>8 then
dbms_output.put_line('输入的日期格式不正确,正确的格式为:yyyymmdd');
end if;
/*函数解析:to_date:日期转换函数;trunc:截断函数,'yyyy'表示按年份截断,则会返回当年的1月1号;
add_months:月份加减函数,加11到12月份;last_day:跳到当月月底函数;
经过这几个函数的转化,则输入的日期就会变成当年的12月31日;ceil:向上取整*/
v_end:=last_day(add_months(trunc(to_date(i_date,'yyyy-mm-dd'),'yyyy'),11));
--用年底的日期减去输入的日期,则会返回相差的天数
o_end:=ceil(v_end-to_date(i_date,'yyyy-mm-dd'));
dbms_output.put_line(to_date(i_date,'yyyy-mm-dd')||'距离年底还有'||o_end||'天');
--异常处理
exception
when others then
v_errm:=sqlerrm;
dbms_output.put_line(v_errm);
end sp_end;
--调用存储过程
declare
v_end varchar2(50);
begin
sp_end('20230330',v_end);
end;
注:有不解的可以 留言。