目标:
在主存储过程的一个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;