--编写一个存储过程,输入一个日期,返回该日期与当下日期的时间差,如果该差是负的,则提示该日期已经过去XX天,不然提示距离该日期还有xx天

文章定义了一个Oracle存储过程`sp_minus`,它接受一个输入日期参数`i_date`和一个输出日期差值参数`o_minus`。存储过程首先检查输入日期的格式,然后计算输入日期与当前日期的差值,并根据差值输出相应的信息。在遇到异常时,会捕获错误并打印错误信息。文章通过四个示例调用展示了不同日期情况下的执行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--创建存储过程,一个输入参数,一个输出参数
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;

 

注:有问题可以留言,谢谢! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值