《MysqL数据库MysqL存储过程中的异常处理解析》要点:
本文介绍了MysqL数据库MysqL存储过程中的异常处理解析,希望对您有用。如果有疑问,可以联系我们。
MysqL必读定义异常捕获类型及处理办法:
@H_403_11@MysqL必读 DECLARE handler_action HANDLER FOR condition_value [,condition_value] ... statement handler_action: CONTINUE | EXIT | UNDO condition_value: MysqL_error_code | sqlSTATE [VALUE] sqlstate_value | condition_name | sqlWARNING | NOT FOUND | sqlEXCEPTIONMysqL必读这里面需要注意几点:
MysqL必读a、condition_value [,condition_value],这个的话说明可以包括多种情况(方括弧表示可选的),也就是一个handler可以定义成针对多种情况进行相应的 *** 作;另外condition_value可以包括的值有上面列出来的6种:
MysqL必读1、MysqL_error_code,这个表示MysqL的错误代码,错误代码是一个数字,完成是由MysqL自己定义的,这个值可以参考MysqL数据库错误代码及信息.
MysqL必读2、sqlSTATE [VALUE] sqlstate_value,这个同错误代码类似形成一一对应的关系,它是一个5个字符组成的字符串,关键的地方是它从ANSI sql和ODBC这些标准中引用过来的,因此更加标准化,而不像上面的error_code完全是MysqL自己定义给自己用的,这个和第一个类似也可以 参考MysqL数据库错误代码及信息.
MysqL必读3、condtion_name,这个是条件名称,它使用DECLARE...CONDITION语句来定义,这个后面我们会介绍如何定义自己的condition_name.
MysqL必读4、sqlWARNING,表示sqlTATE中的字符串以‘01'起始的那些错误,比如Error: 1311 sqlSTATE: 01000 (ER_SP_UNINIT_VAR)
MysqL必读5、NOT FOUND,表示sqlTATE中的字符串以‘02'起始的那些错误,比如Error: 1329 sqlSTATE: 02000 (ER_SP_FETCH_NO_DATA)
MysqL必读6、sqlEXCEPTION,表示sqlSTATE中的字符串不是以'00'、'01'、'02' 起始的那些错误,这里'00'起始的sqlSTATE其实表示的是成功执行而不是错误,另外两个就是上面的4和5的两种情况.
MysqL必读上面的6种情况其实可以分为两类:
MysqL必读一类就是比较明确的处理,就是对指定的错误情况进行处理,包括1、2、3这三种方式;
MysqL必读另一类是对对应类型的错误的 处理,就是对某一群错误的处理,包括4、5、6这三种方式.这个是介绍了condition_value.另外还要注意的一个内容是MysqL在默认情况 下(也就是我们没有定义处理错误的办法-handler)自己的错误处理机制:
MysqL必读1、对于sqlWARNING和NOT FOUND的处理办法就是无视错误继续执行,所以在游标的例子里面如果我们没有对repeat的条件判断的那个值做个no_more_products=1的handler来处理,那么循环就会一直下去.
MysqL必读2、对于sqlEXCEPTION的话,其默认的处理办法是在出现错误的地方就终止掉了.
MysqL必读b、statement,这个比较简单就是当出现某种条件/错误时,我们要执行的语句,可以是简单的如 SET var = value这样的简单的语句,也可以是复杂的多行的语句,多行的话可以使用BEGIN ..... END这里把语句包括在里面(这个好比delphi里面的情况,注意到我们的存储过程也是多行的,所以也要BEGIN .... END).
MysqL必读c、handler_action,这个表示当执行完上面的statement后,希望执行怎样的动作,这里包括CONTINUE、EXIT、UNDO,表示继续、退出、撤销(暂时不支持).这边就是两种动作,其实这两种动作在上面也说过了,CONTINUE就是一个是sqlWARNING和NOT FOUND的默认处理办法,而EXIT就是sqlEXCEPTION的默认处理办法.
MysqL必读另:
MysqL必读condition_name:命名条件
MysqL error code或者sqlSTATE code的可读性太差,所以引入了命名条件:
MysqL必读语法:
MysqL必读使用:
@H_403_11@MysqL必读 # original DECLARE CONTINUE HANDLER FOR 1216 MysqL_statements; # changed DECLARE foreign_key_error CONDITION FOR 1216; DECLARE CONTINUE HANDLER FOR foreign_key_error MysqL_statements;MysqL必读示例:
@H_403_11@MysqL必读 CREATE PROCEDURE sp_add_location (in_location VARCHAR(30),in_address1 VARCHAR(30),in_address2 VARCHAR(30),zipcode VARCHAR(10),OUT out_status VARCHAR(30)) BEGIN DECLARE CONTINUE HANDLER FOR 1062 SET out_status='Duplicate Entry'; SET out_status='OK'; INSERT INTO locations (location,address1,address2,zipcode) VALUES (in_location,in_address1,in_address2,zipcode); END;MysqL必读以上就是本文的全部内容,希望对大家的学习有所赞助,也希望大家多多支持内存溢出PHP.
内存溢出培训学院每天发布《MysqL数据库MysqL存储过程中的异常处理解析》等实战技能,PHP、MysqL、liNUX、APP、Js,CSS全面培养人才。
总结以上是内存溢出为你收集整理的MYSQL数据库mysql存储过程中的异常处理解析全部内容,希望文章能够帮你解决MYSQL数据库mysql存储过程中的异常处理解析所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)