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 ;
相關文章
相關標籤/搜索