• ibatis通过Map封装参数调用存储过程


    一、存储过程如下(领导写的)

    CREATE OR REPLACE PROCEDURE agent_UIMOrIMEICheck_pro (
       I_CARD_NO        IN     VARCHAR2,                       --UIM卡或手机串号
       I_CARD_FLAG      IN     NUMBER,                         --标识 1. 验证UIM卡是否已经被使用  2.验证补卡设备号是否当天多次补卡
       O_RETURN_VALUE      OUT VARCHAR2                         --返回结果
                                       )
    AS
       V_COUNT        NUMBER;
       V_agentOperid    varchar2(30);
       V_time   date;
       V_orderId varchar2(30);
    /******************************************************************************
       该存储过程用于判断UIM卡号是否已经使用过或手机串号是否已经进行空机核销或使用
       Authority  wanglongqiang
       修改标识:去掉串号验证逻辑,完善UIM卡验证 传入标识入参改为传入设备号
    ******************************************************************************/
    BEGIN
       O_RETURN_VALUE := 'SUCCESS';
       
       if(I_CARD_FLAG=1)then 
       --验证UIM卡输入是否正确
       if(lengthb(I_CARD_NO)<>19) then
         O_RETURN_VALUE:='系统检测您输入的ICCID(UIM)卡号存在问题,请确保是否为19位或是否输入空格!';
       
       elsif(substr(I_CARD_NO,1,7)<>'8986031') then
            O_RETURN_VALUE:='系统检测您输入的ICCID(UIM)卡号存在问题,请确保是否以8986031打头!';
       else
     
       --uim卡使用情况验证 uim卡使用
        --1.判断产品新装里面是否用到该白卡
          SELECT COUNT (business_orderId)
            INTO V_COUNT
            FROM log_businessaccept
           WHERE NVL (business_orderId, '0') <> '0' and issuccess in ('订单成功','前台待缴款') AND UIM_NUMBER = I_CARD_NO;
            IF (V_COUNT = 0) then
            --查询补卡信息表中是否有记录存在
              select count(order_id) into V_COUNT from LOG_REPAIRCARD  where nvl(order_id,'0')<>'0' and is_success in ('订单成功','前台待缴款') and uimnumber= I_CARD_NO;
              if(V_COUNT=0) then
                 O_RETURN_VALUE := 'SUCCESS';
              else
                select agent_id,business_date,order_id into V_agentOperid,V_time,V_orderId from log_repaircard where nvl(order_id,'0')<>'0' and is_success in ('订单成功','前台待缴款') and flag=0 and uimnumber= I_CARD_NO;
                 O_RETURN_VALUE:='代理商工号'||V_agentOperid||'于'||to_char(V_time,'yyyy-MM-dd')||'补(换)卡已使用该UIM卡,订单号为:'||V_orderId||'请更换新卡!';
              end if;
            
            else 
             select agent_operid,business_date,business_orderid  into V_agentOperid,V_time,V_orderId from log_businessaccept WHERE NVL (business_orderId, '0') <> '0' and issuccess in ('订单成功','前台待缴款') AND UIM_NUMBER = I_CARD_NO;
                O_RETURN_VALUE:='代理商工号'||V_agentOperid||'于'||to_char(V_time,'yyyy-MM-dd')||'新装受理已使用该UIM卡,订单号为:'||V_orderId||'请更换新卡!';
            
            end if;
           
       end if;
       
       else
        select count(*) into V_COUNT from LOG_REPAIRCARD where nvl(order_id,'0')<>'0' and is_success in ('订单成功','前台待缴款') and to_char(business_date,'yyyy-MM-dd')=to_char(sysdate,'yyyy-MM-dd') and businessnumber=I_CARD_NO;
        if(V_COUNT=0) then
            O_RETURN_VALUE := 'SUCCESS';
        else
            select agent_id,business_date,order_id into V_agentOperid,V_time,V_orderId from log_repaircard where nvl(order_id,'0')<>'0' and is_success in ('订单成功','前台待缴款') and to_char(business_date,'yyyy-MM-dd')=to_char(sysdate,'yyyy-MM-dd') and businessnumber=I_CARD_NO and rownum<2;
            O_RETURN_VALUE:='代理商工号'||V_agentOperid||'于'||to_char(V_time,'yyyy-mm-dd hh24:mi:ss')||'(今天)已对该设备号进行补(换)卡,订单号为:'||V_orderId||',请到订单查询菜单查询订单状态信息!';
        end if;
    
       end if;
    EXCEPTION
       WHEN NO_DATA_FOUND
       THEN
          O_RETURN_VALUE := 'SUCCESS';
       WHEN OTHERS
       THEN
          O_RETURN_VALUE := 'SUCCESS';
    END agent_UIMOrIMEICheck_pro;
    

    注意点:该存储过程不是我写的,公司所有。


    二、在ibatis配置文件中添加配置

        <parameterMap class="map" id="checkParam">
            <parameter property="cardNo" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
            <parameter property="cardFlag" jdbcType="DECIMAL" javaType="java.lang.Integer" mode="IN"/>
            <parameter property="result" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"/>
        </parameterMap>
    
        <procedure id="checkUIMorIMEI" parameterMap="checkParam">
            <![CDATA[
                {call agent_UIMOrIMEICheck_pro(?,?,?)}
            ]]>
        </procedure>

    注意点:parameterMap中的参数顺序要对应三个问号顺序,也就是存储过程的3个参数顺序,in表示入参,out表示出参

    三、调用

    public String checkCardNo(String cardNo, String cardFlag) {
            Map map = new HashMap();
            map.put("cardNo", cardNo);
            map.put("cardFlag", Integer.parseInt(cardFlag));
            try{
                getSqlMapClientTemplate().insert("DLS_LOG_BUSINESSACCEPT.checkUIMorIMEI",map);
                String result=(String)map.get("result");
                return result;
            }catch(Exception ex){      
                
            }
        }

    注意点:这里map要封装所需要的参数,只有两个,ibatis会自动把返回结果也放到map里面去

  • 相关阅读:
    Delphi异常处理try except语句和try finally语句用法以及区别
    test
    Infopath resource
    C# IDE
    操作数据库
    不同版本数据库的导入
    workflow for sharepoint 2007
    http://www.cnblogs.com/BearStudyHard/archive/2008/03/26/1123267.html
    深入浅出InfoPath——安装VSTO
    如何使用Lotuscript管理Excel中的工作表?
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3196657.html
Copyright © 2020-2023  润新知