《Mysql必讀MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程》要點(diǎn):
本文介紹了Mysql必讀MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL數(shù)據(jù)庫(kù)有時(shí)候,不希望存儲(chǔ)過(guò)程拋出錯(cuò)誤中止執(zhí)行,而是希望返回一個(gè)錯(cuò)誤碼. Mysql 支持異常處理,通過(guò)定義 CONTINUE/EXIT 異常處理的 HANDLER 來(lái)捕獲 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 / 無(wú)數(shù)據(jù) / 其他異常).其中, FOR 后面可以改為 SQLWARNING, NOT FOUND, SQLEXCEPTION 來(lái)指示所有異常都處理,相當(dāng)于 oracle 中的 others .例如,當(dāng)不進(jìn)行異常處理時(shí),以下代碼將直接拋出一個(gè) ERROR 1062 (23000) 錯(cuò)誤:
MYSQL數(shù)據(jù)庫(kù)
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;
MYSQL數(shù)據(jù)庫(kù)經(jīng)過(guò)異常處理后,可以避免拋出錯(cuò)誤,而是定義一個(gè)返回參數(shù) o_ret 賦予特殊值來(lái)表示失敗,這樣,比如在 java 代碼中,可以通過(guò)獲取返回值而不是捕獲異常的方式來(lái)處理業(yè)務(wù)邏輯.例如將返回值設(shè)置為 -1:
MYSQL數(shù)據(jù)庫(kù)
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;
MYSQL數(shù)據(jù)庫(kù)當(dāng)然,對(duì)于特定的SQL語(yǔ)句,也可以指定比如主鍵沖突,就rollback;
MYSQL數(shù)據(jù)庫(kù)
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()//
《Mysql必讀MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程》是否對(duì)您有啟發(fā),歡迎查看更多與《Mysql必讀MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/9881.html