刚刚接触存储过程,遇到个问题。
在存储过程中通过两个查询语句检索出两个结果集(这两个结果集分别是当月有效工作日的结果集和当月员工填写的日报日期),现在我想对这两个结果集进行遍历比较(即员工要将每个有效工作日都填到日报表中,如果当月日报填写不全则发邮件通知本人),该怎么实现呢。这里是不是一定要用到游标呢,
是不是大体应该是下面这样呢,不过对游标的使用我不太会了,有经验的人指点一下呗,谢谢!!!!create or replace procedure test(IN_NENGETU IN VARCHAR2, --结算年月           
                                                               IN_USERID  IN VARCHAR2, --用户编号
                                    OUT_RET    OUT NUMBER )--返回值
IS  --从工作日维护表里取出当前月的有效工作日,即除休息日以外的日期结果集。
  cursor c_1  is SELECT cdata FROM m_calender where nengetu=IN_NENGETU;
  --从日报表里取出该员工当月登录的日报日期,比如当月该员工只登录了10天的日报,但该月的有效工作日应为21天
  cursor  c_2   is SELECT mdata FROM t_nippou where nengetu=IN_NENGETU and syaincd=IN_USERID;
begin     open c_1;
     open c_2;
     循环c_1,遍历每一个日期,循环中再遍历c_2,取出c_2中的日期和c_1的日期比较,
        如果c_1中有的日期在c_2中没有,则做处理。
     
end;

解决方案 »

  1.   

    用loop就可以变李呀。嵌套循环呀。
      

  2.   

    1. 用for 循环,可以省去 open ,close。
    2. 用loop循环。
      

  3.   

       open c_1;
        loop
          fetch c_1 into field1;
          open c_2; 
          loop 
          fetch c_2
             into field2;      
          if(field1==field2)
          begin
           Exits=1;
           你要做的事;
           exit when Exits=1;
          end;    
           exit when c_1%notfound; 
          end loop;
        end loop;
      

  4.   

    没有说清楚。补充一下。1. for 循环。非常简单,省事。
    for my_item inc_1 loop
    ....
    end loop;
    2.fetch
    rCurr c1%ROWTYPE;   //要定义一个变量
    ....OPEN c1;
    FETCH c1 INTO rCurr;
    WHILE c1%FOUND LOOP
    ...
    END LOOP;        
    CLOSE c1;