Oracle 存储过程游标遍历查询信息,并打印输出异常信息

--市案件审批--for 修复一单多派执行异常的情况,使用游标遍历执行
  PROCEDURE PROC_CASEAPPLY(P_CASENUM     VARCHAR2,
                           P_APPLYTYPE   NUMBER,
                           P_ISAPPROVE   NUMBER,
                           P_DAYS        NUMBER,
                           P_REPCONTENT  VARCHAR2,
                           P_RETURNVALUE OUT NUMBER) IS
    V_CASEID    NUMBER;
    V_RECUSERID NUMBER;
    V_TACHEID   NUMBER;
    V_ROLETYPE  NUMBER;
  BEGIN
    
    --获取需更新的案件信息,因存在一单多派的情况,所以需遍历查询到的案件
    declare--定义游标 
      cursor case_cursor is select 案件记录号 from 投诉业务表 where 市案件公文号 = P_CASENUM and 环节号 in (95, 96);
    begin
      for curcase in case_cursor loop--遍历游标
        V_CASEID := curcase.案件记录号;  
        
        
        /*SELECT 案件记录号
          INTO V_CASEID
          FROM 投诉业务表
         WHERE 市案件公文号 = P_CASENUM
           AND 环节号 IN (95, 96);*/
      
        SELECT 申请部门人员
          INTO V_RECUSERID
          FROM 案件申请表
         WHERE 案件记录号 = V_CASEID
           AND 是否最新 = 1
           AND 申请类型 = P_APPLYTYPE;
      
        SELECT ROLETYPE
          INTO V_ROLETYPE
          FROM TABBASEPERSON
         WHERE CHVID = V_RECUSERID;
      
        --退回
        IF P_APPLYTYPE = 1 THEN
          IF P_ISAPPROVE = 0 THEN
            --驳回
          
            UPDATE 案件申请表
               SET 是否驳回 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
             WHERE 案件记录号 = V_CASEID
               AND 申请类型 = 1
               AND 是否最新 = 1;
            UPDATE 投诉业务表 SET 环节号 = 98 WHERE 案件记录号 = V_CASEID;
            V_TACHEID := 98;
          ELSE
            --批准
            /*世道要变了,不能删除市级批准退回的案件。 yy 2015年3月19日10:29:08
            DELETE FROM 投诉业务表 WHERE 案件记录号 = V_CASEID;
            DELETE FROM TABDOCSTEP WHERE CASEID = V_CASEID;
            DELETE FROM 案件申请表 WHERE 案件记录号 = V_CASEID;
            */
            /*103:市批准退回*/
            UPDATE 投诉业务表 T
               SET T.环节号 = 103
             WHERE T.市案件公文号 = P_CASENUM; --T.案件记录号 = V_CASEID;
            V_TACHEID := 103;
          
            UPDATE 案件申请表
               SET 是否批准  = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
             WHERE 案件记录号 = V_CASEID
               AND 申请类型 = 1
               AND 是否最新 = 1;
          
            --转移结案表
            PKG_TACHERUN.PRO_TRANSFORM(V_CASEID,
                                       '投诉业务表',
                                       '案件记录号',
                                       '案件公文号,实际完成时间,规定完成时间,派单员,环节号,主办部门人员,主办部门,主办发送标志,主办签收标志');
          
          END IF;
        ELSE
          --延期
          IF P_ISAPPROVE = 0 THEN
            --驳回
            UPDATE 案件申请表
               SET 是否驳回 = 1, 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT
             WHERE 案件记录号 = V_CASEID
               AND 申请类型 = 2
               AND 答复时间 IS NULL;
            --AND 是否最新 = 1;        
            IF V_ROLETYPE = 29 THEN
              UPDATE 投诉业务表 SET 环节号 = 117 WHERE 案件记录号 = V_CASEID;
              V_TACHEID := 117;
            ELSIF V_ROLETYPE = 28 THEN
              UPDATE 投诉业务表 SET 环节号 = 18 WHERE 案件记录号 = V_CASEID;
              V_TACHEID := 18;
            END IF;
          
          ELSE
            UPDATE 案件申请表
               SET 答复时间 = SYSDATE, 答复内容 = P_REPCONTENT, 是否批准 = 1
             WHERE 案件记录号 = V_CASEID
               AND 申请类型 = 2
                  --AND 是否最新 = 1;
               AND 答复时间 IS NULL;
          
            IF V_ROLETYPE = 28 THEN
              UPDATE 投诉业务表 SET 环节号 = 17 WHERE 案件记录号 = V_CASEID;
              V_TACHEID := 17;
            
            ELSIF V_ROLETYPE = 29 THEN
              UPDATE 投诉业务表 SET 环节号 = 116 WHERE 案件记录号 = V_CASEID;
              V_TACHEID := 116;
            END IF;
          
            UPDATE 投诉业务表
               SET 办理时间       = 办理时间 + P_DAYS * 1440,
                   规定完成时间   = 规定完成时间 + P_DAYS,
                   市办理时限     = 市办理时限 + P_DAYS * 1440,
                   市规定完成时间 = 市规定完成时间 + P_DAYS
             WHERE 市案件公文号 = P_CASENUM;
          END IF;
        END IF;
      
        --更新环节表数据
        UPDATE TABDOCSTEP
           SET STATE = 3, ISNEWEST = 0, SENDDATE = SYSDATE
         WHERE ISNEWEST = 1
           AND RECID = PKG_CONSTANT.USERIDCITY
           AND CASEID = V_CASEID;
        --添加环节表数据
        INSERT INTO TABDOCSTEP
          (STEPID, CASEID, SENDID, RECID, TACHEID)
        VALUES
          (SEQ_TABDOCSTEP.NEXTVAL,
           V_CASEID,
           PKG_CONSTANT.USERIDCITY,
           V_RECUSERID,
           V_TACHEID);
          
            
      end loop;
    end;
  
  
    P_RETURNVALUE := 1;
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE);
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      P_RETURNVALUE := 0;
      ROLLBACK;
  END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值