1. 程式人生 > >mysql儲存過程異常處理

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 ;

相關推薦

mysql儲存過程異常處理

DELIMITER $$ USE `mtnoh_aaa_platform`$$ DROP PROCEDURE IF EXISTS `proc_eoms_electric_power_generation_check_engine`$$ CREATE DEFINER=`dwgl`@`%`

PostgreSQL 儲存過程異常處理(轉載)

轉載地址:https://www.cnblogs.com/lottu/p/7410978.html 異常錯誤處理 在PL/pgSQL函式中,如果沒有異常捕獲,函式會在發生錯誤時直接退出,與其相關的事物也會隨之回滾。我們可以通過使用帶有EXCEPTION子句的BEGIN塊來捕獲異常並使

Oracle 儲存過程異常處理

ORA-00001: 違反唯一約束條件 (.)  ORA-00017: 請求會話以設定跟蹤事件  ORA-00018: 超出最大會話數  ORA-00019: 超出最大會話許可數  ORA-00020: 超出最大程序數 ()  ORA-00021: 會話附屬於其它某些程序;無法轉換會話  ORA-00022:

MySql儲存過程—8、條件處理(Condition Handling) / 錯誤、異常處理

在遊標裡面我們有簡要的介紹了一個NOT FOUND這個條件處理(錯誤、異常處理)的情況,條件處理涉及到兩個語句,一個是DECLARE...CONDITION,另一個是DECLARE....HANDLER。在遊標的例子中是使用了一個DECLARE....HANDLER。先來看

mysql儲存過程引數為陣列或者物件的處理方式

問題場景:做一個物品系統, 需要批量存入。 思考:儲存過程的的引數不支援陣列,是否可以用json字串代替 測試用的JSON字串: let obj = { itemlist:[ { regid:0, iteminfo:

MYSQL】折騰了半天的儲存過程異常錯誤

昨天碰到了一個儲存過程出錯,但是mysqlapi的QUERY並不返回錯誤的問題。後來才知道,呼叫儲存過程,會返回一個呼叫情況的結果集,也就是最後一個結果集。如果前面有別的結果集,query會返回成功,當next_result返回>0的值時,就表示呼叫情況結果集出現錯誤,這時用errno和erro

mysql 儲存過程、遊標及逐行處理的配合使用

1. 資料準備 +----+------+--------+ | id | name | price1 | +----+------+--------+ | 1 | 大米 | 5 | | 2 | 雞蛋 | 4.5 | | 3 | 蘋果 | 6

關於mysql儲存過程建立動態表名及引數處理

轉載請註明出處:簾卷西風的專欄(http://blog.csdn.net/ljxfblog) 最近遊戲開始第二次內測,開始處理操作日誌,最開始把日誌放到同一個表裡面,發現一天時間,平均100玩家線上,操作記錄就超過13萬條,決定拆表,按照日期來儲存日誌,每天的日誌存到一個表裡

MySql儲存過程捕獲異常回滾

DROP PROCEDURE IF EXISTS pro_test;CREATE PROCEDURE pro_test(    para_a varchar(50),    para_b varchar(50))BEGIN    DECLARE result_code INT

mysql儲存過程 遊標 迴圈使用 含SQLSTATE mysql異常程式碼彙總大全

錯誤:1201 SQLSTATE: HY000 (ER_MASTER_INFO) 訊息:無法初始化主伺服器資訊結構,在MySQL錯誤日誌中可找到更多錯誤訊息。·     錯誤:1202 SQLSTATE: HY000 (ER_SLAVE_THREAD) 訊息:無法建立從執行緒,請檢查系統資源。·     錯

Mysql儲存過程8:repeat循環

local cal 其他 host ted query code class pan 語法: repeat SQL until 條件 end repeat; 就是相當於其他語言中的: do{ # }while(); mys

Mysql儲存過程4:mysql變量設置

from 默認 pan procedure weight use mysql變量 sql 寫法 默認全局變量是兩個@@開頭, 可用show variables查看所有默認變量: @@user #declare定義變量只能用在儲存過程中 #declare 變量名 數據類型

Mysql儲存過程3:if語句

sql語句 inpu arguments ted div mysql then for clas --if/else語句 if 條件 then SQL語句 else SQL語句elseifSQL語句 end if; create procedure test1( n

Mysql儲存過程2:變量定義與參數傳遞

變量定義 color ted lec mysq 傳遞 參數傳遞 fault 可選 #儲存過程 中的變量定義 declare 變量名 類型 可選類型 -- 跟建表差不多 create procedure p() begin declare age int de

MySQL 儲存過程-原理、語法、函數詳細說明

exp sql 十六進制 作用範圍 安全機制 系統管理員 rtrim 編程 xtra Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後存儲在數據庫中,當需要使用該組SQL語句時用戶只需要通過指定儲存過程的名字並給定參數就可以調用執行它了,簡而言之就是一組

MySQL儲存過程

date 算數運算 else 使用 not 流程控制語句 posit 表達 gin 儲存過程 本文章原創,轉載需註明出處. 前提: 在大型數據庫中 來源: 為了完成特定功能的SQL語句集 定義: 儲存在數據庫中, 用戶通過指定儲存過程的名字並給出參數(帶有參數的)來執

MySQL儲存過程和函式的區別與優缺點

為什麼要使用儲存過程和函式 資料庫物件儲存過程和函式,是用來實現一組關於表操作的SQL語句程式碼當做一個整體來執行。一個完整的操作會包含多條SQL語句,在執行過程中需要根據前面的SQL語句來執行結果有選擇的執行後面的SQL語句。 儲存過程和函式可以簡單的理解為一條或多條SQL語句的集合

儲存過程異常捕獲繼續執行

set serveroutput on; declare   V_SQL VARCHAR2(255);   errorCode number; --異常編碼     errorMsg varchar2(1000); --異常

spring data jpa 如何呼叫mysql儲存過程

  A:首先定義儲存過程依賴的jpa表:     @Entity     @Table(name="evenmngt_childthingtree_tmp")//資料庫中的表名     @Name

mysql儲存過程迴圈 while/repeat/loop

先把語句結束符設定成// mysql> DELIMITER // while 條件 do … end while mysql> create procedure proce_while() -> begin -> de