MySQL存儲(chǔ)過程中一些基本的異常處理教程
有時(shí)候,不希望存儲(chǔ)過程拋出錯(cuò)誤中止執(zhí)行,而是希望返回一個(gè)錯(cuò)誤碼。 Mysql 支持異常處理,通過定義 CONTINUE/EXIT 異常處理的 HANDLER 來捕獲 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 / 無數(shù)據(jù) / 其他異常)。其中, FOR 后面可以改為 SQLWARNING, NOT FOUND, SQLEXCEPTION 來指示所有異常都處理,相當(dāng)于 oracle 中的 others 。例如,當(dāng)不進(jìn)行異常處理時(shí),以下代碼將直接拋出一個(gè) ERROR 1062 (23000) 錯(cuò)誤:
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;
經(jīng)過異常處理后,可以避免拋出錯(cuò)誤,而是定義一個(gè)返回參數(shù) o_ret 賦予特殊值來表示失敗,這樣,比如在 java 代碼中,可以通過獲取返回值而不是捕獲異常的方式來處理業(yè)務(wù)邏輯。例如將返回值設(shè)置為 -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;
當(dāng)然,對(duì)于特定的SQL語(yǔ)句,也可以指定比如主鍵沖突,就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()//
相關(guān)文章
MySQL的查詢緩存機(jī)制基本學(xué)習(xí)教程
這篇文章主要介紹了MySQL的查詢緩存機(jī)制基本學(xué)習(xí)教程,默認(rèn)針對(duì)InnoDB存儲(chǔ)引擎下來將,需要的朋友可以參考下2015-11-11
MySQL查看和修改字符編碼的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狹ySQL查看和修改字符編碼的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
解析如何使用Zend Framework 連接數(shù)據(jù)庫(kù)
本篇文章是對(duì)如何使用Zend Framework 連接數(shù)據(jù)庫(kù)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
分析mysql中一條SQL查詢語(yǔ)句是如何執(zhí)行的
為了充分發(fā)揮MySQL的性能并順利地使用,就必須正確理解其設(shè)計(jì)思想,因此,了解MySQL的邏輯架構(gòu)是必要的。本文將通過一條SQL查詢語(yǔ)句的具體執(zhí)行過程來詳細(xì)介紹MySQL架構(gòu)中的各個(gè)組件2021-06-06
MySQL數(shù)據(jù)庫(kù)內(nèi)置函數(shù)使用說明
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)內(nèi)置函數(shù)使用說明的相關(guān)資料,MySQL提供了多種內(nèi)置函數(shù)來實(shí)現(xiàn)不同的功能,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12

