动态调用存储过程

目标:

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值