mysql存储过程异常处理

DELIMITER $$

USE `mtnoh_aaa_platform`$$

DROP PROCEDURE IF EXISTS `proc_eoms_electric_power_generation_check_engine`$$

CREATE DEFINER=`dwgl`@`%` PROCEDURE `proc_eoms_electric_power_generation_check_engine`(
    p_oil_engine_id INT,
    p_task_id INT,    
    p_task_sn VARCHAR(40),
    P_task_user VARCHAR(255),
    P_task_use_date DATETIME,
    P_task_end_date DATETIME
)
BEGIN
    DECLARE p_oil_engine_Status,P_oil_engine_use_status VARCHAR(300);
    DECLARE p_engine_id,p_engine_id_old,p_use_task_id,p_work_flow_version_id INT;
    DECLARE p_use_task_sn VARCHAR(40);
    DECLARE result_code CHAR(5) DEFAULT '00000'; DECLARE msg TEXT;DECLARE set_error_code CHAR(1);    
    DECLARE result_info,success_info TEXT;
    
    DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN         
        GET DIAGNOSTICS CONDITION 1 result_code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;        
        ROLLBACK;
        
        UPDATE mtdwgl_res.tb_irms_material_oil_engine oe
        SET oil_engine_use_status = '空闲'
        WHERE oe.deleted = '0' AND oe.oil_engine_id = p_oil_engine_id;        
        SET result_info = CONCAT('校验油机状态失败,错误代码:',result_code,',错误信息:',CHAR(13),CHAR(10),IFNULL(msg,''));
        
        SELECT result_info; 
    END;
    
    START TRANSACTION;
    
        SELECT oe.oil_engine_Status,oe.oil_engine_use_status,oe.oil_engine_id,ic.task_id,ic.task_sn
        INTO p_oil_engine_Status,P_oil_engine_use_status,p_engine_id,p_use_task_id,p_use_task_sn
        FROM mtdwgl_res.tb_irms_material_oil_engine oe
        LEFT JOIN mtnoh_aaa_resource.tb_task_electricity_generation_info_current ic
        ON oe.oil_engine_id = ic.oil_engine_id
        WHERE oe.deleted = '0' AND oe.oil_engine_id = p_oil_engine_id
        LIMIT 1;        
        
        SELECT ic.oil_engine_id
        INTO p_engine_id_old
        FROM mtnoh_aaa_resource.tb_task_electricity_generation_info_current ic
        WHERE ic.task_id = p_task_id AND ic.task_sn = p_task_sn
        LIMIT 1;
        
        IF (p_oil_engine_Status = '在用' AND P_oil_engine_use_status = '空闲') OR p_use_task_sn = p_task_sn THEN
            SET p_work_flow_version_id := mtnoh_aaa_platform.get_work_flow_version_id(p_task_sn);
            
            IF IFNULL(p_engine_id_old,p_oil_engine_id) <> p_oil_engine_id THEN
                UPDATE mtdwgl_res.tb_irms_material_oil_engine oe
                SET oil_engine_use_status = '空闲'
                WHERE oe.deleted = '0' AND oe.oil_engine_id = p_engine_id_old;
            END IF;
            
            UPDATE mtdwgl_res.tb_irms_material_oil_engine oe
            SET oil_engine_use_status = '发电'
            WHERE oe.deleted = '0' AND oe.oil_engine_id = p_oil_engine_id;
            
            INSERT INTO mtnoh_aaa_resource.tb_task_electricity_generation_info_current
            (oil_engine_id,work_flow_version_id,task_id,task_sn,task_user,task_use_date,task_end_date)
            VALUES(p_oil_engine_id,p_work_flow_version_id,p_task_id,p_task_sn,P_task_user,P_task_use_date,P_task_end_date)
            ON DUPLICATE KEY UPDATE task_user = P_task_user
            ,task_use_date = P_task_use_date
            ,task_end_date = P_task_end_date;
        ELSE
            IF IFNULL(p_engine_id,-1) <> -1 THEN
                SELECT p_oil_engine_Status,P_oil_engine_use_status;
            END IF;
        END IF;
    
    COMMIT;    
    
END$$

DELIMITER ;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值