oracle存储过程中遍历的疑惑

此前很少使用oracle,现在进入一项目,使用的是oracle,瞬间拙计。
发现别人写的存储过程中有两种写法去遍历记录,如下:

Procedure Syn_His_Main Is
sqlStr Varchar2(2000);
Cursor cur Is
  Select *
    From Crm_Od.Syn_Data_Config a
   where a.next_exec_date < sysdate
     and a.cycletime <> 0;
Begin
    For Rec in cur Loop
      sqlStr := 'begin ' || Rec.Packagename || '.' || Rec.Procedurename ||
                '; end;';
      Execute Immediate sqlStr;
      Update Crm_Od.Syn_Data_Config a
         Set a.last_exec_date = trunc(sysdate),
             a.next_exec_date = trunc(sysdate) + a.cycletime
       where a.Syn_Conf_Id = Rec.Syn_Conf_Id;
      Commit;
    End Loop;
  Exception
    When Others Then
      Null;
  End Syn_His_Main;

------------------------------------------分割线----------------------------------------

For Rec In (Select /*+rule*/
            Distinct Dwtc.Bo_Archive_Grp_Id
              From Crm.Data_Wait_To_Center Dwtc
             Where Dwtc.Deal_Flag = 0
               And Rownum < Dealnum) Loop
  Crm.Data_Source.Synchronization_For_Complate(Rec.Bo_Archive_Grp_Id);
  Delete From Crm.Data_Wait_To_Center
   Where Bo_Archive_Grp_Id = Rec.Bo_Archive_Grp_Id;
  Commit;
End Loop;

这两种有什么不同,或者说哪一种高端一些?谢谢

阅读 6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进