此前很少使用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;
这两种有什么不同,或者说哪一种高端一些?谢谢