DB2存储过程开发最佳实践

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

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

  如果预定义异常集不能满足需求,就可以为特定的SQLSTATE值声明定制异常,然后再为这个定制异常声明处理器。语法如下:

  清单6:定制异常处理器

DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'

  处理器可以由单独的存储过程语句定义,也可以使用由BEGIN…END块界定的复合语句定义。注意在执行符合语句的时候,SQLSATE和SQLCODE的值会被改变,如果需要保留异常前的SQLSATE和SQLCODE,就需要在执行复合语句的第一个语句把SQLSATE和SQLCODE赋予本地变量或参数。

  通常,我们会为存储过程定义一个执行状态的输出参数(例如:poGenStatus)。

  根据这个输出状态,可以表明存储过程是否正确执行完毕。我们需要定义一些异常处理器为这个输出参数赋值。下面是一个例子:

  清单7:定义为输出参数赋值的异常处理器

 -- Generic Handler        
  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND
  BEGIN NOT ATOMIC         
   -- Capture SQLCODE & SQLSTATE 
   SELECT SQLCODE, SQLSTATE   
   INTO  hSqlcode, hSqlstate  
   FROM  SYSIBM.SYSDUMMY1;   
                   
   -- Use the poGenStatus variable to tell the procedure -- what type of
   error occurred      
   CASE hSqlstate         
    WHEN '02000' THEN      
     SET poGenStatus=5000;   
    WHEN '42724' THEN      
     SET poGenStatus=3;     
    ELSE             
     IF (hSqlCode < 0) THEN   
      SET poGenStatus=hSqlCode;
     END IF;          
    END CASE;           
  END;

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

正在加载评论...