--创建存储过程,一个输入参数,一个输出参数
create or replace procedure sp_minus(i_date varchar2,o_minus out varchar2)
is
--声明一个变量,用来存放异常
v_errm varchar2(200);
begin
--判断输入格式
if length(i_date)<>8 then
dbms_output.put_line('输入的日期格式不符,正确格式为:yyyymmdd');
end if;
--计算两个日期的差
o_minus:=ceil(to_date(i_date,'yyyy-mm-dd')-sysdate);
--判断该日期与当前时间是未到,还是已经过去
if o_minus<0 then
dbms_output.put_line(to_date(i_date,'yyyy-mm-dd')||'已经过去了'||o_minus||'天');
elsif o_minus=0 then
dbms_output.put_line(to_date(i_date,'yyyy-mm-dd')||'就是今天');
else
dbms_output.put_line('距离'||to_date(i_date,'yyyy-mm-dd')||'还有'||o_minus||'天');
end if;
--异常处理
exception
when others then
v_errm:=sqlerrm;
dbms_output.put_line(v_errm);
end sp_minus;
--调用该存储过程
--1.当输入的的日期格式不对时
declare
v_date varchar2(30);
begin
sp_minus('2030501',v_date);
end;
--2.输入的日期大于当前日期
declare
v_date varchar2(30);
begin
sp_minus('20230501',v_date);
end;
--3.输入的日期等于当前日期
declare
v_date varchar2(30);
begin
sp_minus('20230329',v_date);
end;
--4.输入日期小于当前日期
declare
v_date varchar2(30);
begin
sp_minus('20230120',v_date);
end;
注:有问题可以留言,谢谢!