Atitit mysql 存储过程捕获全部异常,以及日志记录异常信息

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模式最简单,whilerepeat都麻烦店。loop模式会自动处理集合结束。 4spa

3.2. While模式循环集合 。。须要定义一个 CONTINUE HANDLER FOR NOT FOUND 4

3.3. 参考资料 5

 

 

1.1. 异常的处理模式exit  continue undo模式

默认状况下,mysql异常机制是exit模式,出错直接退出。。

当当咱们对一个集合循环作处理的时候,须要捕获异常,记录日志,继续执行。

 

 

 

 

 

1.2. 捕获全部异常使用        DECLARE continue HANDLER FOR   sqlexception  

 

相比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

 

1.3. 捕获特定异常使用HANDLER FOR  errorcode

1.4. 记录异常到日志表,获取异常代码和异常信息

 

GET DIAGNOSTICS CONDITION 1

code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;

 

SELECT code,msg;

 

 

1.5. 抛出自定义异常

#Routine body goes here...

   SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = "extag_1";  

 

2. 程序语言中捕获sql自定义抛出的异常

 

2.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":[{

 

 

 

3. 集合的循环loop while repeat模式

3.1. 对集合的循环 使用loop模式最简单,whilerepeat都麻烦店。loop模式会自动处理集合结束。

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

 

 

 

3.2. While模式循环集合 。。须要定义一个 CONTINUE HANDLER FOR NOT FOUND

 

 

 

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

 

 

3.3. 参考资料

 

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

相关文章
相关标签/搜索