程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL存儲進程中一些根本的異常處置教程

MySQL存儲進程中一些根本的異常處置教程

編輯:MySQL綜合教程

MySQL存儲進程中一些根本的異常處置教程。本站提示廣大學習愛好者:(MySQL存儲進程中一些根本的異常處置教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL存儲進程中一些根本的異常處置教程正文


有時刻,不願望存儲進程拋失足誤中斷履行,而是願望前往一個毛病碼。 Mysql 支撐異常處置,經由過程界說 CONTINUE/EXIT 異常處置的 HANDLER 來捕捉 SQLWARNING/NOT FOUND/SQLEXCEPTION (正告 / 有數據 / 其他異常)。個中, FOR 前面可以改成 SQLWARNING, NOT FOUND, SQLEXCEPTION 來指導一切異常都處置,相當於 oracle 中的 others 。例如,當不停止異常處置時,以下代碼將直接拋出一個 ERROR 1062 (23000) 毛病:

CREATE PROCEDURE test_proc_ins1(
     IN i_id INT,
     IN i_name VARCHAR(100)
)
BEGIN
     INSERT INTO testproc VALUES (i_id,i_name);
     INSERT INTO testproc VALUES (i_id,i_name);
END;

經由異常處置後,可以免拋失足誤,而是界說一個前往參數 o_ret 付與特別值來表現掉敗,如許,好比在 java 代碼中,可以經由過程獲得前往值而不是捕捉異常的方法來處置營業邏輯。例如將前往值設置為 -1:

CREATE PROCEDURE test_proc_ins1(
     IN i_id INT,
     IN i_name VARCHAR(100),
     OUT o_ret INT)
BEGIN
     DECLARE EXIT HANDLER FOR SQLSTATE '23000' set o_ret = -1;
-- 也能夠如許應用:
-- DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION set o_ret=-1;
     INSERT INTO testproc VALUES (i_id,i_name);
     INSERT INTO testproc VALUES (i_id,i_name);
     set o_ret = 1;
END;

固然,關於特定的SQL語句,也能夠指定好比主鍵抵觸,就rollback;

DECLARE exit HANDLER FOR SQLSTATE '23000'

delimiter //

CREATE PROCEDURE TEST()
BEGIN
DECLARE exit HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND
begin
rollback;
insert into bb values('error');
end;
START TRANSACTION;
INSERT INTO aa VALUES (1);
INSERT INTO aa VALUES (2);
COMMIT;
END;
//

CALL test()//

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved