2012-07-13存储过程

来源:互联网 发布:软件代码保护 编辑:程序博客网 时间:2024/06/14 11:06

前天第一次写了个存储过程,看着两个存储过程逻辑觉得都一样,但是结果却不一样。

存储过程1的结果有错,存储过程2结果却是正确的。


--存储过程1

CREATE OR REPLACE PROCEDURE lp_add_ne_check_del(start_time in date) as
  ne_name          varchar2(255);
  ne_type          varchar2(255);
  compress_date    varchar2(255);
 cursor cur is
select d.* from T_GX_INTERFACE_NE_DEL d where
to_date(d.compress_date,'yyyy-mm-dd') = to_date(to_char(start_time-1,'yyyy-mm-dd'),'yyyy-mm-dd');
begin  
  for cur_res in cur loop
    ne_name := cur_res.ne_name;
    ne_type := cur_res.ne_type;
    compress_date   := cur_res.compress_date;
   --将删除的网元(当月范围内删除当天之前所创建的同一网元)标记为true
   update ldp_add_ne_check_result t set t.del_flag='TRUE' where 
t.ne_name=ne_name and t.ne_type =ne_type
and to_date(t.create_time,'yyyy-mm-dd') < to_date(compress_date,'yyyy-mm-dd')
and to_date(t.create_time,'yyyy-mm-dd') > to_date(to_char(start_time-1,'yyyy-mm'),'yyyy-mm');
  end loop;
  commit;
end;

--存储过程1将T_GX_INTERFACE_NE_DEL 存在的网元都update了,没有考虑到时间


=================================================================================


--存储过程2
CREATE OR REPLACE PROCEDURE lp_add_ne_check_del(start_time in date) as
begin  
  for cur_res in (select d.ne_name,d.ne_type,d.compress_date from T_GX_INTERFACE_NE_DEL d
where to_date(d.compress_date,'yyyy-mm-dd') = to_date(to_char(start_time-1,'yyyy-mm-dd'),'yyyy-mm-dd')) loop
   --将删除的网元(当月范围内删除当天之前所创建的同一网元)标记为true  
   update ldp_add_ne_check_result t set t.del_flag='TRUE' where 
t.ne_name=cur_res.ne_name and t.ne_type =cur_res.ne_type
and to_date(t.create_time,'yyyy-mm-dd') < to_date(cur_res.compress_date,'yyyy-mm-dd')
and to_date(t.create_time,'yyyy-mm-dd') > to_date(to_char(start_time-1,'yyyy-mm'),'yyyy-mm');
  end loop;
  commit;
end;


=========================

怀疑第1过程的写法上:
  for cur_res in cur loop
    ne_name := cur_res.ne_name;
    ne_type := cur_res.ne_type;
    compress_date   := cur_res.compress_date;

这个条件,定位不够准备