目标:
在主存储过程的一个for循环中需要根据不同情况调用不同的子存储过程来完成相应动作
实现:
--1、对目标定单执行检查
oNextItemId :=1;
for checkItems IN(
SELECT * FROM CHECK_ITERM CI WHERE 1=1 ORDER BY CI.ITEM_ID
) loop
if oNextItemId=9999 then
return;
end if;
--判断当前检查项是不是上次检查跳转到的目标检查项,或者上次检查未要求跳转
if oNextItemId is null or checkItems.item_id =oNextItemId then
vCnt :=vCnt+1;
vProcedureName :=checkItems.CHECK_METHOD;
dbms_output.put_line('--> 第'||vCnt||'项:'||checkItems.item_name||' ......................');
--动态调用相应检查项的存储过程
EXECUTE IMMEDIATE 'begin '||vProcedureName||'(:1,:2, :3, :4, :5);'||' end;'
USING iExtSoNbr, out oRetCode, out oRetMsg, out oPatternId, out oNextItemId;
--如果当前检查项发现异常,则中断检查任务
if oRetCode =0 then
--dbms_output.put_line('-->检查结果:[异常]');
dbms_output.put_line(''||oRetMsg||CHR(10));
exit;
else
null;
--dbms_output.put_line('-->检查结果:[正常]');
dbms_output.put_line(''||oRetMsg||CHR(10));
end if;
end if;
end loop;
本文介绍了一种在主存储过程中使用FOR循环动态调用不同子存储过程的方法。该方法根据不同的检查项调用相应的检查方法,实现了流程的灵活控制。当检查项出现异常时,流程将被中断。
1046

被折叠的 条评论
为什么被折叠?



