存储过程例子

本文展示了如何使用Oracle存储过程进行数据处理。首先,定义了一个存储过程`day_street_kh`,该过程计算昨天的日期并获取最大时间戳。接着,删除指定表的数据,并根据条件删除备份表中的数据。然后,通过游标从两个表中选取数据并进行插入操作,同时将数据备份到另一个表中。最后,执行提交操作完成整个流程。

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

create or replace procedure day_street_kh

 is
  yesterday varchar2(30);
  maxTime varchar2(30);
  myCusor SYS_REFCURSOR;

begin
  --参数赋值

  select to_char(sysdate - 1, 'yyyy-MM-dd') into yesterday from dual;
  dbms_output.put_line(yesterday);
 
  select max(t.ymtime) into maxTime from cr_exam_day_stats_bak t ;
   dbms_output.put_line(maxTime);
   
   --插入前删除cr_exam_day_stats 所有数据,
  delete from  cr_exam_day_stats t where  t.typekind='1';
  -- 删除存在的同一天数据
 if(yesterday=maxTime)then
     
    delete from  cr_exam_day_stats_bak t where t.ymtime=yesterday and t.typekind='1';
 
   end if;   

  --游标赋值
  for myCusor in (
    select
       RAWTOHEX(SYS_GUID()) ID,
      '' commname,
        nvl(b.ymtime,yesterday)ymtime,
       nvl(b.loginnum, 0) loginnum,
       nvl(b.updatenum, 0) updatenum,
       nvl(b.slnum, 0) slnum,
       nvl(b.cznum, 0) cznum,
       nvl(b.wxuserNum, 0) wxuserNum,
       nvl(b.userNum, 0) userNum,
       nvl(b.wxUpdateNum, 0) wxUpdateNum,
       '' commno,
       a.streetname,
       1 typekind,
       0  orgnum,
       0  sernum
  from (select distinct t.streetname, t.streetno from SDE.COMMR t) a
  left join

 (select t.streetname,
         t.ymtime,
         sum(t.loginnum) loginnum,
         sum(t.updatenum) updatenum,
         sum(t.slnum) slnum,
         sum(t.cznum) cznum,
         sum(t.wxuserNum) wxuserNum,
         sum(t.userNum) userNum,
         sum(t.wxUpdateNum) wxUpdateNum
    from cr_exam_day_stats t where t.ymtime=yesterday
   group by t.streetname, t.ymtime) b
    on a.streetname = b.streetname
    )
 
    
  --插入数据
 
   loop
    insert into cr_exam_day_stats
      (id,
       commname,
       ymtime,
       loginnum,
       updatenum,
       slnum,
       cznum,
       wxusernum,
       usernum,
       wxupdatenum,
       commno,
       streetname,
       typekind,
       orgnum,
       sernum)
    values
      (myCusor.id,
       myCusor.commname,
       myCusor.ymtime,
       myCusor.loginnum,
       myCusor.updatenum,
       myCusor.slnum,
       myCusor.cznum,
       myCusor.wxusernum,
       myCusor.usernum,
       myCusor.wxupdatenum,
       myCusor.commno,
       myCusor.streetname,
       myCusor.typekind,
       myCusor.orgnum,
       myCusor.sernum);
     --插入到数据备份表
    insert into cr_exam_day_stats_bak
      (id,
       commname,
       ymtime,
       loginnum,
       updatenum,
       slnum,
       cznum,
       wxusernum,
       usernum,
       wxupdatenum,
       commno,
       streetname,
       typekind,
       orgnum,
       sernum)
    values
      (myCusor.id,
       myCusor.commname,
       myCusor.ymtime,
       myCusor.loginnum,
       myCusor.updatenum,
       myCusor.slnum,
       myCusor.cznum,
       myCusor.wxusernum,
       myCusor.usernum,
       myCusor.wxupdatenum,
       myCusor.commno,
       myCusor.streetname,
       myCusor.typekind,
       myCusor.orgnum,
       myCusor.sernum);
 end loop;
  commit;
end day_street_kh;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值