MYSQL调用存储过程并返回结果

存储过程如下所示:

CREATE DEFINER=`mysqladmin`@`%` PROCEDURE `P_ANALYZE_PO_RELATED`(
  IN p_issue_code VARCHAR (50),
  IN p_issue_line_code varchar (50),
  out p_batch_no varchar (500)
)
BEGIN
  #'t_sc_tm_p_analyze_po_related_temp' t_sc_tm_p_analyze_po_related_bills_temp
  #更新订单数量
  declare v_issue_id varchar (36) ;
  declare v_batch_no varchar (60) default uuid() ;
  declare v_group_no int default 0 ;
  DECLARE v_group INT DEFAULT 0 ;
  declare v_count int default 0 ;
  declare v_count_a int default 0 ;
  declare v_count_b int default 0 ;
  declare v_car_apply_code varchar (50) ;
  declare v_transport_code varchar (50) ;
  DECLARE v_tray VARCHAR (50) ;
  DECLARE done INT DEFAULT FALSE ;
  DECLARE cur_car_apply CURSOR FOR 
  SELECT DISTINCT 
    am.car_apply_code 
  FROM
    t_sc_tm_bu_car_apply_d ad 
    INNER JOIN t_sc_tm_bu_car_apply_m am 
      ON ad.car_apply_m_id = am.car_apply_m_id 
    INNER JOIN t_sc_tm_bu_tray_info t 
      ON ad.tray_label_code = t.tray_label_code 
    INNER JOIN t_sc_tm_bu_tray_pack_rel tr 
      ON t.tray_id = tr.tray_id 
    INNER JOIN t_sc_tm_bu_pack_label p 
      ON tr.pack_lab_code = p.pack_lab_code 
  WHERE p.issue_code = p_issue_code 
    AND p.issue_line_code = p_issue_line_code ;
  ##################自送托盘
  DECLARE cur_car_scheme_tray CURSOR FOR 
  SELECT DISTINCT 
    tp.`TRANSPORT_CODE` 
  FROM
    t_sc_tm_bu_car_scheme tp 
    INNER JOIN t_sc_tm_bu_assigncar_scheme s 
      ON tp.`CAR_SCHEME_ID` = s.`CAR_SCHEME_ID` 
    INNER JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
      ON sdt.`ASSIGNCAR_SCHEME_ID` = s.`ASSIGNCAR_SCHEME_ID` 
    INNER JOIN t_sc_tm_bu_tray_info t 
      ON t.`TRAY_LABEL_CODE` = sdt.`TRAY_LABEL_CODE` 
    INNER JOIN t_sc_tm_bu_tray_pack_rel tr 
      ON t.tray_id = tr.tray_id 
    INNER JOIN t_sc_tm_bu_pack_label p 
      ON p.`PACK_LAB_CODE` = tr.`PACK_LAB_CODE` 
  WHERE tp.`LOGISTICS_FLAG` IN ('0', '2') 
    AND tp.`TRAN_CONTENT_TYPE` = '1' 
    AND p.`ISSUE_CODE` = p_issue_code 
    AND p.`ISSUE_LINE_CODE` = p_issue_line_code ;
  ###################自送包装
  DECLARE cur_car_scheme_pack CURSOR FOR 
  SELECT DISTINCT 
    tp.`TRANSPORT_CODE` 
  FROM
    t_sc_tm_bu_car_scheme tp 
    INNER JOIN t_sc_tm_bu_assigncar_scheme s 
      ON tp.`CAR_SCHEME_ID` = s.`CAR_SCHEME_ID` 
    INNER JOIN t_sc_tm_bu_assigncar_detail_pack sdp 
      ON sdp.`ASSIGNCAR_SCHEME_ID` = s.`ASSIGNCAR_SCHEME_ID` 
    INNER JOIN t_sc_tm_bu_pack_label p 
      ON p.`PACK_LAB_CODE` = sdp.`PACK_LAB_CODE` 
  WHERE tp.`LOGISTICS_FLAG` IN ('0', '2') 
    AND tp.`TRAN_CONTENT_TYPE` = '2' 
    AND p.`ISSUE_CODE` = p_issue_code 
    AND p.`ISSUE_LINE_CODE` = p_issue_line_code ;
  ###################未定托盘
  declare cur_uncertain_tray cursor for 
  SELECT DISTINCT 
    t.`TRAY_LABEL_CODE` 
  FROM
    t_sc_tm_bu_tray_info t 
    INNER JOIN t_sc_tm_bu_tray_pack_rel tr 
      ON t.tray_id = tr.tray_id 
    INNER JOIN t_sc_tm_bu_pack_label p 
      ON tr.`PACK_LAB_CODE` = p.`PACK_LAB_CODE` 
  WHERE p.`ISSUE_CODE` = p_issue_code 
    AND p.`ISSUE_LINE_CODE` = p_issue_line_code 
    AND t.`PROCESS_FLAG` IN ('1', '2') 
    and p.rel_tray = '1' ;
  ###################更新可删标记
  DECLARE cur_group CURSOR FOR 
  SELECT DISTINCT 
    t.group_no 
  from
    t_sc_tm_p_analyze_po_related_temp t 
  where t.batch_no = v_batch_no ;
  ################退出标记
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE ;
  DELETE 
  FROM
    t_sc_tm_p_analyze_po_related_temp 
  WHERE create_date < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY) ;
  DELETE 
  FROM
    t_sc_tm_p_analyze_po_related_bills_temp 
  WHERE create_date < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 3 DAY) ;
  set p_batch_no = v_batch_no ;
  #取货
  open cur_car_apply ;
  car_apply :
  loop
    fetch cur_car_apply into v_car_apply_code ;
    if (done) 
    then leave car_apply ;
    end if ;
    select 
      count(1) into v_count 
    from
      t_sc_tm_p_analyze_po_related_bills_temp t 
    where t.batch_no = v_batch_no 
      and t.bill_type = 'CAR_APPLY' 
      and t.bill_code = v_car_apply_code ;
    if (v_count = 0) 
    then set v_group_no = v_group_no + 1 ;
    INSERT INTO t_sc_tm_p_analyze_po_related_bills_temp (
      batch_no,
      group_no,
      bill_type,
      bill_code
    ) 
    SELECT DISTINCT 
      v_batch_no,
      v_group_no,
      'CAR_APPLY',
      am.car_apply_code 
    FROM
      t_sc_tm_bu_car_apply_d ad 
      INNER JOIN t_sc_tm_bu_car_apply_m am 
        ON ad.car_apply_m_id = am.car_apply_m_id 
      INNER JOIN t_sc_tm_bu_tray_info t 
        ON ad.tray_label_code = t.tray_label_code 
      INNER JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
        ON sdt.tray_label_code = t.tray_label_code 
      INNER JOIN t_sc_tm_bu_tray_pack_rel tr 
        ON t.tray_id = tr.tray_id 
      INNER JOIN t_sc_tm_bu_pack_label p 
        ON tr.pack_lab_code = p.pack_lab_code 
    WHERE am.car_apply_code = v_car_apply_code ;
    cur_apply_scheme :
    loop
      select 
        count(1) into v_count_a 
      from
        t_sc_tm_p_analyze_po_related_bills_temp t 
      where t.batch_no = v_batch_no 
        and t.group_no = v_group_no ;
      INSERT INTO t_sc_tm_p_analyze_po_related_bills_temp (
        batch_no,
        group_no,
        bill_type,
        bill_code
      ) 
      SELECT DISTINCT 
        v_batch_no,
        v_group_no,
        'CAR_SCHEME',
        tp.transport_code 
      FROM
        t_sc_tm_bu_car_scheme tp 
        INNER JOIN t_sc_tm_bu_assigncar_scheme s 
          ON tp.car_scheme_id = s.car_scheme_id 
        INNER JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
          ON s.assigncar_scheme_id = sdt.assigncar_scheme_id 
      WHERE sdt.tray_label_code IN 
        (SELECT 
          t.tray_label_code 
        FROM
          t_sc_tm_bu_car_apply_d ad 
          INNER JOIN t_sc_tm_bu_car_apply_m am 
            ON ad.car_apply_m_id = am.car_apply_m_id 
          INNER JOIN t_sc_tm_bu_tray_info t 
            ON ad.tray_label_code = t.tray_label_code 
          INNER JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
            ON sdt.tray_label_code = t.tray_label_code 
          INNER JOIN t_sc_tm_bu_tray_pack_rel tr 
            ON t.tray_id = tr.tray_id 
          INNER JOIN t_sc_tm_bu_pack_label p 
            ON tr.pack_lab_code = p.pack_lab_code 
        WHERE am.car_apply_code IN 
          (SELECT 
            bill_code 
          FROM
            t_sc_tm_p_analyze_po_related_bills_temp tmp 
          WHERE tmp.batch_no = v_batch_no 
            AND tmp.group_no = v_group_no 
            AND tmp.bill_type = 'CAR_APPLY')) 
        AND NOT EXISTS 
        (SELECT 
          bill_code 
        FROM
          t_sc_tm_p_analyze_po_related_bills_temp tmp 
        WHERE tmp.batch_no = v_batch_no 
          AND tmp.group_no = v_group_no 
          AND tmp.bill_type = 'CAR_SCHEME' 
          AND tmp.bill_code = tp.transport_code) ;
      INSERT INTO t_sc_tm_p_analyze_po_related_bills_temp (
        batch_no,
        group_no,
        bill_type,
        bill_code
      ) 
      SELECT DISTINCT 
        v_batch_no,
        v_group_no,
        'CAR_APPLY',
        am.car_apply_code 
      FROM
        t_sc_tm_bu_car_apply_d ad 
        INNER JOIN t_sc_tm_bu_car_apply_m am 
          ON ad.car_apply_m_id = am.car_apply_m_id 
        INNER JOIN t_sc_tm_bu_tray_info t 
          ON ad.tray_label_code = t.tray_label_code 
        INNER JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
          ON sdt.tray_label_code = t.tray_label_code 
        INNER JOIN t_sc_tm_bu_tray_pack_rel tr 
          ON t.tray_id = tr.tray_id 
        INNER JOIN t_sc_tm_bu_pack_label p 
          ON tr.pack_lab_code = p.pack_lab_code 
      WHERE t.tray_label_code IN 
        (SELECT DISTINCT 
          sdt.tray_label_code 
        FROM
          t_sc_tm_bu_car_scheme tp 
          INNER JOIN t_sc_tm_bu_assigncar_scheme s 
            ON tp.car_scheme_id = s.car_scheme_id 
          INNER JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
            ON s.assigncar_scheme_id = sdt.assigncar_scheme_id 
        WHERE tp.transport_code IN 
          (SELECT 
            bill_code 
          FROM
            t_sc_tm_p_analyze_po_related_bills_temp tmp 
          WHERE tmp.batch_no = v_batch_no 
            and tmp.group_no = v_group_no 
            AND tmp.bill_type = 'CAR_SCHEME')) 
        AND NOT EXISTS 
        (SELECT 
          bill_code 
        FROM
          t_sc_tm_p_analyze_po_related_bills_temp tmp 
        WHERE tmp.batch_no = v_batch_no 
          and tmp.group_no = v_group_no 
          AND tmp.bill_type = 'CAR_APPLY' 
          AND tmp.bill_code = am.car_apply_code) ;
      select 
        count(1) into v_count_b 
      from
        t_sc_tm_p_analyze_po_related_bills_temp t 
      where t.batch_no = v_batch_no 
        and t.group_no = v_group_no ;
      if (v_count_a = v_count_b) 
      then 
      INSERT INTO t_sc_tm_p_analyze_po_related_temp (
        batch_no,
        group_no,
        issue_code,
        issue_line_code,
        pack_label_code,
        tray_label_code,
        car_apply_code,
        transport_code,
        scheme_code,
        deliver_code,
        pack_qty,
        SHIPMENT_STATUS,
        RECEIVE_STATUS,
        GROUP_TYPE
      ) 
      SELECT 
        v_batch_no,
        v_group_no,
        p.issue_code,
        p.issue_line_code,
        p.pack_lab_code,
        t.tray_label_code,
        am.car_apply_code,
        tp.transport_code,
        s.scheme_code,
        d.deliver_code,
        p.pack_qty,
        p.SHIPMENT_STATUS,
        p.RECEIVE_STATUS,
        '取货' 
      FROM
        t_sc_tm_bu_car_apply_d ad 
        INNER JOIN t_sc_tm_bu_car_apply_m am 
          ON ad.car_apply_m_id = am.car_apply_m_id 
        LEFT JOIN t_sc_tm_bu_tray_info t 
          ON ad.tray_label_code = t.tray_label_code 
        LEFT JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
          ON sdt.tray_label_code = t.tray_label_code 
        LEFT JOIN t_sc_tm_bu_tray_pack_rel tr 
          ON t.tray_id = tr.tray_id 
        LEFT JOIN t_sc_tm_bu_pack_label p 
          ON tr.`PACK_LAB_CODE` = p.`PACK_LAB_CODE` 
        LEFT JOIN t_sc_tm_bu_assigncar_scheme s 
          ON sdt.assigncar_scheme_id = s.assigncar_scheme_id 
        LEFT JOIN t_sc_tm_bu_car_scheme tp 
          ON s.car_scheme_id = tp.car_scheme_id 
        LEFT JOIN t_sc_tm_bu_deliver_sendmain_d dd 
          ON dd.pack_lab_code = p.pack_lab_code 
        LEFT JOIN t_sc_tm_bu_deliver_sendmain d 
          ON d.cpr_sm_sendmain_m_id = dd.cpr_sm_sendmain_m_id 
      WHERE am.car_apply_code in 
        (SELECT 
          bill_code 
        FROM
          t_sc_tm_p_analyze_po_related_bills_temp tmp 
        WHERE tmp.batch_no = v_batch_no 
          and tmp.group_no = v_group_no 
          AND tmp.bill_type = 'CAR_APPLY') ;
      leave cur_apply_scheme ;
      end if ;
    end loop cur_apply_scheme ;
    end if ;
  end loop car_apply ;
  CLOSE cur_car_apply ;
  #自送托盘
  set done = false ;
  open cur_car_scheme_tray ;
  car_scheme_tray :
  LOOP
    FETCH cur_car_scheme_tray INTO v_transport_code ;
    IF (done) 
    THEN LEAVE car_scheme_tray ;
    END IF ;
    set v_group_no := v_group_no + 1 ;
    INSERT INTO t_sc_tm_p_analyze_po_related_temp (
      batch_no,
      group_no,
      issue_code,
      issue_line_code,
      pack_label_code,
      tray_label_code,
      car_apply_code,
      transport_code,
      scheme_code,
      deliver_code,
      pack_qty,
      SHIPMENT_STATUS,
      RECEIVE_STATUS,
      GROUP_TYPE
    ) 
    SELECT 
      v_batch_no,
      v_group_no,
      p.issue_code,
      p.issue_line_code,
      p.pack_lab_code,
      t.tray_label_code,
      '',
      tp.transport_code,
      s.scheme_code,
      d.deliver_code,
      p.pack_qty,
      p.SHIPMENT_STATUS,
      p.RECEIVE_STATUS,
      '自送托盘' 
    FROM
      t_sc_tm_bu_tray_info t 
      LEFT JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
        ON sdt.tray_label_code = t.tray_label_code 
      LEFT JOIN t_sc_tm_bu_tray_pack_rel tr 
        ON t.tray_id = tr.tray_id 
      LEFT JOIN t_sc_tm_bu_pack_label p 
        ON tr.`PACK_LAB_CODE` = p.`PACK_LAB_CODE` 
      LEFT JOIN t_sc_tm_bu_assigncar_scheme s 
        ON sdt.assigncar_scheme_id = s.assigncar_scheme_id 
      LEFT JOIN t_sc_tm_bu_car_scheme tp 
        ON s.car_scheme_id = tp.car_scheme_id 
      LEFT JOIN t_sc_tm_bu_deliver_sendmain_d dd 
        ON dd.pack_lab_code = p.pack_lab_code 
      LEFT JOIN t_sc_tm_bu_deliver_sendmain d 
        ON d.cpr_sm_sendmain_m_id = dd.cpr_sm_sendmain_m_id 
    WHERE tp.transport_code = v_transport_code ;
  end loop car_scheme_tray ;
  close cur_car_scheme_tray ;
  #自送包装
  SET done = FALSE ;
  open cur_car_scheme_pack ;
  car_scheme_pack :
  LOOP
    FETCH cur_car_scheme_pack INTO v_transport_code ;
    IF (done) 
    THEN LEAVE car_scheme_pack ;
    END IF ;
    set v_group_no := v_group_no + 1 ;
    INSERT INTO t_sc_tm_p_analyze_po_related_temp (
      batch_no,
      group_no,
      issue_code,
      issue_line_code,
      pack_label_code,
      tray_label_code,
      car_apply_code,
      transport_code,
      scheme_code,
      deliver_code,
      pack_qty,
      SHIPMENT_STATUS,
      RECEIVE_STATUS,
      GROUP_TYPE
    ) 
    SELECT 
      v_batch_no,
      v_group_no,
      p.issue_code,
      p.issue_line_code,
      p.pack_lab_code,
      '',
      '',
      tp.transport_code,
      s.scheme_code,
      d.deliver_code,
      p.pack_qty,
      p.SHIPMENT_STATUS,
      p.RECEIVE_STATUS,
      '自送包装' 
    FROM
      t_sc_tm_bu_assigncar_detail_pack sdp 
      LEFT JOIN t_sc_tm_bu_pack_label p 
        ON sdp.`PACK_LAB_CODE` = p.`PACK_LAB_CODE` 
      LEFT JOIN t_sc_tm_bu_assigncar_scheme s 
        ON sdp.assigncar_scheme_id = s.assigncar_scheme_id 
      LEFT JOIN t_sc_tm_bu_car_scheme tp 
        ON s.car_scheme_id = tp.car_scheme_id 
      LEFT JOIN t_sc_tm_bu_deliver_sendmain_d dd 
        ON dd.pack_lab_code = p.pack_lab_code 
      LEFT JOIN t_sc_tm_bu_deliver_sendmain d 
        ON d.cpr_sm_sendmain_m_id = dd.cpr_sm_sendmain_m_id 
    WHERE tp.transport_code = v_transport_code ;
  END LOOP car_scheme_pack ;
  close cur_car_scheme_pack ;
  #未定托盘
  SET done = FALSE ;
  OPEN cur_uncertain_tray ;
  uncertain_tray :
  LOOP
    FETCH cur_uncertain_tray INTO v_tray ;
    IF (done) 
    THEN LEAVE uncertain_tray ;
    END IF ;
    SET v_group_no := v_group_no + 1 ;
    INSERT INTO t_sc_tm_p_analyze_po_related_temp (
      batch_no,
      group_no,
      issue_code,
      issue_line_code,
      pack_label_code,
      tray_label_code,
      car_apply_code,
      transport_code,
      scheme_code,
      deliver_code,
      pack_qty,
      SHIPMENT_STATUS,
      RECEIVE_STATUS,
      GROUP_TYPE
    ) 
    SELECT 
      v_batch_no,
      v_group_no,
      p.issue_code,
      p.issue_line_code,
      p.pack_lab_code,
      t.tray_label_code,
      '',
      tp.transport_code,
      s.scheme_code,
      d.deliver_code,
      p.pack_qty,
      p.SHIPMENT_STATUS,
      p.RECEIVE_STATUS,
      '未定托盘' 
    FROM
      t_sc_tm_bu_tray_info t 
      LEFT JOIN t_sc_tm_bu_assigncar_detail_tyay sdt 
        ON sdt.tray_label_code = t.tray_label_code 
      LEFT JOIN t_sc_tm_bu_tray_pack_rel tr 
        ON t.tray_id = tr.tray_id 
      LEFT JOIN t_sc_tm_bu_pack_label p 
        ON tr.`PACK_LAB_CODE` = p.`PACK_LAB_CODE` 
      LEFT JOIN t_sc_tm_bu_assigncar_scheme s 
        ON sdt.assigncar_scheme_id = s.assigncar_scheme_id 
      LEFT JOIN t_sc_tm_bu_car_scheme tp 
        ON s.car_scheme_id = tp.car_scheme_id 
      LEFT JOIN t_sc_tm_bu_deliver_sendmain_d dd 
        ON dd.pack_lab_code = p.pack_lab_code 
      LEFT JOIN t_sc_tm_bu_deliver_sendmain d 
        ON d.cpr_sm_sendmain_m_id = dd.cpr_sm_sendmain_m_id 
    WHERE t.tray_label_code = v_tray ;
  END LOOP uncertain_tray ;
  CLOSE cur_uncertain_tray ;
  #未定包装  
  SET done = FALSE ;
  SET v_group_no := v_group_no + 1 ;
  INSERT INTO t_sc_tm_p_analyze_po_related_temp (
    batch_no,
    group_no,
    issue_code,
    issue_line_code,
    pack_label_code,
    tray_label_code,
    car_apply_code,
    transport_code,
    scheme_code,
    deliver_code,
    pack_qty,
    SHIPMENT_STATUS,
    RECEIVE_STATUS,
    GROUP_TYPE
  ) 
  SELECT 
    v_batch_no,
    v_group_no,
    p.issue_code,
    p.issue_line_code,
    p.pack_lab_code,
    '',
    '',
    '',
    '',
    '',
    p.pack_qty,
    p.SHIPMENT_STATUS,
    p.RECEIVE_STATUS,
    '未定包装' 
  FROM
    t_sc_tm_bu_pack_label p 
  WHERE p.`REL_TRAY` = '0' 
    AND p.PROCESS_FLAG IN ('1', '2') 
    AND p.`ISSUE_CODE` = p_issue_code 
    AND p.`ISSUE_LINE_CODE` = p_issue_line_code ;
  ###########更新可删除标记    
  SET done = FALSE ;
  OPEN cur_group ;
  all_group :
  LOOP
    FETCH cur_group INTO v_group ;
    IF (done) 
    THEN LEAVE all_group ;
    END IF ;
    select 
      count(1) into v_count 
    from
      t_sc_tm_p_analyze_po_related_temp t 
    where t.batch_no = v_batch_no 
      and t.group_no = v_group 
      and (
        ifnull(t.shipment_status, '0') = 1 
        or IFNULL(t.receive_status, '0') = 1
      ) ;
    if (v_count = 0) 
    then 
    update 
      t_sc_tm_p_analyze_po_related_temp t 
    set
      t.is_deletable = '1' 
    WHERE t.batch_no = v_batch_no 
      AND t.group_no = v_group ;
    end if ;
  END LOOP all_group ;
  CLOSE cur_group ;
END

调用过程如下:
service层

# issueCode,issueLineCode为调用参数
HashMap<String, String> map1 = new HashMap<>();
map1.put("issueCode",map.get("CGDDH").toString());
map1.put("issueLineCode",map.get("CGDDHH").toString());
closeOrderRelDao.getAnalyzePo(map1);

DAO层

  void getAnalyzePo(Map map);

XML层

-- po 为返回值,这个值会自动保存到入参的map里面
<select id="getAnalyzePo" resultType="Map" statementType="CALLABLE">
        CALL p_analyze_po_related( #{issueCode,mode=IN},
            #{issueLineCode,mode=IN},
            #{po,mode=OUT,jdbcType=VARCHAR})
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值