DB2存储过程开发最佳实践

豆豆网   技术应用频道   2007年09月04日  【字号: 收藏本文

内容摘要:本文以 DB2 开发人员的角度介绍了在 DB2 存储过程开发中需要注意的事项和技巧。新手如果能够按照本文介绍的最佳实践来开发存储过程,可以避免一些常见的错误,从而编写出高效的程序。本文从初始化参数、游标、异常处理、临时表的使用以及如何寻找并 rebind 非法存储过程等常见问题进行了着重讨论,并且给出了示例代码。

  清单4:声明异常处理器

DECLARE handler-type HANDLER FOR condition handler-action

  异常处理器类型(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异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,并且会将控制流返回调用者。

  以下示例声明了两个异常处理器。 EXIT处理器会在出现SQLEXCEPTION 或者SQLWARNING异常的时候被调用。EXIT处理器会在终止SQL程序之前,将名为stmt的变量设为"ABORTED",并且将控制流返回给调用者。UNDO处理器会将控制流返回给调用者之前,回滚存储过程体中已经完成的SQL操作。

  清单5:异常处理器示例

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
    SET stmt = 'ABORTED';
  
DECLARE UNDO HANDLER FOR NOT FOUND;

来源:ibm    作者:常伟    责编:豆豆技术应用

正在加载评论...