DB2 存储过程的异常处理器类型有几种? |
本文标签:DB2 存储过程 以下的文章主要向大家讲述的是DB2 存储过程的异常处理方法,在DB2数据库中,假如你要使用sqlcode,那么你就必须在DDL语句之前declare 。这是我们大家都必须了解的,以下就是文章的主要内容描述 。
存储过程异常的处理:
异常处理器类型(handler-type)有以下几种:
CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句 。
EXIT 在处理器操作完成之后,存储过程会终止,并将控制返回给调用者 。
UNDO 在处理器操作执行之前,DB2会回滚存储过程中执行的SQL操作 。在处理器操作完成之后,存储过程会终止,并将控制返回给调用者 。
异常处理器可以处理基于特定SQLSTATE值的定制异常,或者处理预定义异常的类 。预定义的3种异常如下所示:
NOT FOUND 标识导致SQLCODE值为+100或者SQLSATE值为02000的异常 。这个异常通常在SELECT没有返回行的时候出现 。
SQLEXCEPTIOIN 标识导致SQLCODE值为负的异常 。
SQLWARNING 标识导致警告异常或者导致+100以外的SQLCODE正值的异常 。
如果产生了NOT FOUND 或者SQLWARNING异常,并且没有为这个异常定义异常处理器,那么就会忽略这个异常,并且将控制流转向下一个语句 。如果产生了SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么DB2 存储过程就会失败,并且会将控制流返回调用者 。
以下示例声明了两个异常处理器 。 EXIT处理器会在出现SQLEXCEPTION 或者SQLWARNING异常的时候被调用 。EXIT处理器会在终止SQL程序之前,将名为stmt的变量设为"ABORTED",并且将控制流返回给调用者 。UNDO处理器会将控制流返回给调用者之前,回滚存储过程体中已经完成的SQL操作 。
清单3:异常处理器示例
如果预定义异常集不能满足需求,就可以为特定的SQLSTATE值声明定制异常,然后再为这个定制异常声明处理器 。语法如下:
清单4:定制异常处理器
处理器可以由单独的存储过程语句定义,也可以使用由BEGIN…END块界定的复合语句定义 。注意在执行符合语句的时候,SQLSATE和SQLCODE的值会被改变,如果需要保留异常前的SQLSATE和SQLCODE,就需要在执行复合语句的第一个语句把SQLSATE和SQLCODE赋予本地变量或参数 。
通常,我们会为DB2 存储过程定义一个执行状态的输出参数(例如:poGenStatus) 。
异常的声明 异常的处理
较好的实例:
以上的相关内容就是对DB2 存储过程异常处理方法的介绍,望你能有所收获 。
|