MyBatis 中调用存储过程的方式

来源:互联网 发布:查看端口8080的命令 编辑:程序博客网 时间:2024/05/22 00:44


mode=IN -- 表示传入值;mode=OUT -- 表示输出值(返回结果)。

<select id="pCREATEZKZHSEQ" statementType="CALLABLE">

{call P_CREATE_ZKZHSEQ(#{kslbdm,mode=IN,jdbcType=VARCHAR},#{zcq,mode=IN,jdbcType=VARCHAR},#{result,mode=OUT,jdbcType=VARCHAR})}

</select>


CREATE OR REPLACE PROCEDURE NEWBASE.P_CREATE_ZKZHSEQ
(P_KSLBDM IN VARCHAR2,P_ZCQ IN VARCHAR2,P_RES OUT VARCHAR2) 
IS   
/*
参数说明:
*/
   L_KSLBDM VARCHAR2(5);
   L_ZCQ VARCHAR2(3);
   L_QXDM VARCHAR2(2);
   L_SEQ_NM VARCHAR2(1000);
   L_SEQ_NM2 VARCHAR2(1000);
   L_SQL VARCHAR2(1000);
   L_CNT NUMBER;
   L_serial NUMBER;
   L_add VARCHAR2(5);
   L_RET VARCHAR2(1000);
   L_KSLBDM_EXISTFLG boolean := false;
   L_ZCQ_EXISTFLG boolean := false;
   L_REC_EXIST boolean := false;

   type rc is ref cursor; 
   CUR_QX rc;

BEGIN
   P_RES := 'OK'; 
   IF P_KSLBDM IS NOT NULL THEN
     L_KSLBDM := TRIM(P_KSLBDM);
     L_KSLBDM_EXISTFLG := true;
   END IF;

   IF P_ZCQ IS NOT NULL THEN
     L_ZCQ := TRIM(P_ZCQ);
    L_ZCQ_EXISTFLG := true;
   END IF;

   L_CNT := 0;
   IF L_KSLBDM_EXISTFLG =true AND LENGTH(L_KSLBDM) <> 2 THEN 
       -- L_RET := 'NG'||'[22001]考试类别错误';
       -- GOTO RET;
P_RES := 'NG';
RETURN;
   END IF;
   
   IF L_ZCQ_EXISTFLG =true AND LENGTH(L_ZCQ) <> 3 THEN 
       -- L_RET := 'NG'||'[22001]注册期错误';
       -- GOTO RET;
P_RES := 'NG';
RETURN;
   END IF;

   IF L_KSLBDM_EXISTFLG = false THEN 
     L_KSLBDM := '01';
   END IF;
   IF L_ZCQ_EXISTFLG = false THEN
      SELECT PARAM_STRING INTO L_ZCQ FROM SYS_PARAM  WHERE PARAM_TYPE ='zk' AND PARAM_KSLBDM=L_KSLBDM AND PARAM_NAME='zcq';
   END IF;

     OPEN CUR_QX FOR
     SELECT SC.DM
FROM SYS_CODE SC
WHERE SC.DMLB = 'quxian'
  AND SC.KSLBDM = L_KSLBDM;
   BEGIN
        LOOP
          L_CNT := 0;
          FETCH CUR_QX INTO L_QXDM;
          EXIT WHEN CUR_QX%NOTFOUND;
          -- 记录存在
          L_REC_EXIST := true;

          --编辑序列
          L_SEQ_NM := 'ZC_SEQUENCE_' || L_KSLBDM || '_' || L_QXDM || '_' || L_ZCQ;
 L_SEQ_NM2 := 'WZK.' || L_SEQ_NM;
          -- 判断WZK下序列是否已存在,如果不存在,创建
         SELECT COUNT(0) into L_CNT FROM all_sequences where sequence_owner='WZK' and sequence_name=L_SEQ_NM;
BEGIN
         IF L_CNT = 0 THEN
            --如果不存在,抛例外
              execute immediate 
                    'create sequence ' ||  L_SEQ_NM2  || chr(10) ||
                    'minvalue 1' || chr(10) ||
                    'maxvalue 99999' || chr(10) ||
                    'start with 1' || chr(10) ||
                    'increment by 1' || chr(10) ||
                    'nocache';
         END IF;
EXCEPTION  
      WHEN OTHERS THEN  
           P_RES := 'NG';   
   END;
        END LOOP;
        CLOSE CUR_QX;
   END;
  RETURN;
END;
/

1 0
原创粉丝点击