Atitit mysql 存儲過程捕獲全部異常,以及日誌記錄異常信息html
1.1. 異常的處理模式exit continue undo模式 1java
1.2. 捕獲全部異常使用 DECLARE continue HANDLER FOR sqlexception 1mysql
1.3. 捕獲特定異常使用HANDLER FOR errorcode 2sql
1.4. 記錄異常到日誌表,獲取異常代碼和異常信息 2數據庫
1.5. 拋出自定義異常 3ide
2. 程序語言中捕獲sql自定義拋出的異常 3oop
2.1. 代碼 3fetch
3. 集合的循環loop while repeat模式 4ui
3.1. 對集合的循環 使用loop模式最簡單,while和repeat都麻煩店。loop模式會自動處理集合結束。 4spa
3.2. While模式循環集合 。。須要定義一個 CONTINUE HANDLER FOR NOT FOUND 4
3.3. 參考資料 5
默認狀況下,mysql異常機制是exit模式,出錯直接退出。。
噹噹咱們對一個集合循環作處理的時候,須要捕獲異常,記錄日誌,繼續執行。
相比js這一類語言的異常捕獲,sql的異常捕獲比較粗糙,只能捕獲一個sp內的異常,不能精確到某幾個代碼行。。。
BEGIN
#Routine body goes here...
DECLARE a varchar(102) ; DECLARE code varchar(102) ; DECLARE msg varchar(102) ;
DECLARE b varchar(100) ; DECLARE n int ;
##catch
DECLARE continue HANDLER FOR sqlexception
cat1:BEGIN
GET DIAGNOSTICS CONDITION 1
code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
SELECT code,msg;
#exit ALL
#leave cat1;
END;
set n=1;
# while n<5 do
lable:LOOP
call exThrow();
set n=n+1;
select 'in loop';
if n>3 THEN
select ' n>3 ';
leave lable;
end if;
#end while;
end loop;
END
GET DIAGNOSTICS CONDITION 1
code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
SELECT code,msg;
#Routine body goes here...
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";
BEGIN
#Routine body goes here...
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";
END
{
"@type":"java.lang.RuntimeException",
"cause":{
"@type":"java.sql.SQLException",
"errorCode":1644,
"localizedMessage":"extag_1 Query: call exThrow Parameters: []",
"message":"extag_1 Query: call exThrow Parameters: []",
"nextException":{
"errorCode":1644,
"localizedMessage":"extag_1",
"message":"extag_1",
"sQLState":"HY000",
"sQLState":"HY000",
"stackTrace":[{
"localizedMessage":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",
"message":"java.sql.SQLException: extag_1 Query: call exThrow Parameters: []",
"stackTrace":[{
BEGIN
#Routine body goes here...
DECLARE a varchar(102) ;
DECLARE b varchar(100) ; DECLARE n int ; DECLARE rs_finished int ;
DECLARE cursor_name CURSOR FOR select id,identity from system_passport order by id desc limit 3;
OPEN cursor_name;
lable:LOOP
fetch cursor_name into a,b;
select a,b;
end LOOP;
END
BEGIN
#Routine body goes here...
DECLARE a varchar(102) ;
DECLARE b varchar(100) ; DECLARE n int ; DECLARE rs_finished int ;
DECLARE cursor_name CURSOR FOR select id,identity from system_passport order by id desc limit 5;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET rs_finished=1;
#set rs_finished=0;
set n=1;select 'open cursor bef';
OPEN cursor_name;
select 'open cursor after';
fetch cursor_name into a,b;
select a,b;
select rs_finished; # is null
while rs_finished is null do
select a,b;
fetch cursor_name into a,b;
end while;
END
GET DIAGNOSTIC 語句 - 千里之行始於足下 - 博客頻道 - CSDN.NET.html
Atitit mysql數據庫自定義異常在java裏面的捕獲與處理推薦標準與規範
做者:: 綽號:老哇的爪子claw of Eagle 偶像破壞者Iconoclast image-smasher
捕鳥王"Bird Catcher kok 虔誠者Pious 宗教信仰捍衛者 Defender Of the Faith. 卡拉卡拉紅斗篷 Caracalla red cloak 萬獸之王
簡稱:: Emir Attilax Akbar 埃米爾 阿提拉克斯 阿克巴
全名::Emir Attilax Akbar bin Mahmud bin attila bin Solomon bin adam Al Rapanui 埃米爾 阿提拉克斯 阿克巴 本 馬哈茂德 本 阿提拉 本 所羅門 本亞當 阿爾 拉帕努伊
經常使用名:艾提拉(艾龍), EMAIL:1466519819@qq.com
頭銜:uke總部o2o負責人,全球網格化項目創始人,
uke交友協會會長 uke捕獵協會會長 Emir Uke部落首席大酋長,
uke宗教與文化融合事務部部長, uke宗教改革委員會副主席
uke制度與重大會議委員會委員長,uke保安部首席大隊長,uke制度檢查委員會副會長,
uke 首席cto 軟件部門總監 技術部副總監 研發部門總監主管 產品部副經理 項目部副經理 uke科技研究院院長 uke軟件培訓大師
uke波利尼西亞區大區連鎖負責人 湯加王國區域負責人 uke克爾格倫羣島區連鎖負責人,萊恩羣島區連鎖負責人,uke布維島和南喬治亞和南桑威奇羣島大區連鎖負責人
Uke軟件標準化協會理事長理事長 Uke 數據庫與存儲標準化協會副會長
uke終身教育學校副校長 Uke醫院 與醫學院方面的創始人
uec學院校長, uecip圖像處理機器視覺專業系主任 uke文檔檢索專業系主任
Uke圖像處理與機器視覺學院首席院長
Uke 戶外運動協會理事長 度假村首席大村長 uke出版社編輯總編
轉載請註明來源:attilax的專欄 http://blog.csdn.net/attilax
http://www.cnblogs.com/attilax/
--Atiend v9