编写一个存储过程,输入一个日期,判定其距离年底还有多少天

--编写一个存储过程,输入一个日期,判定其距离年底还有多少天
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;

注:有不解的可以 留言。

猜你喜欢

转载自blog.csdn.net/lxslf/article/details/129850858
今日推荐