WEB开发网
开发学院数据库DB2 DB2存储过程开发最佳实践 阅读

DB2存储过程开发最佳实践

 2007-09-04 16:22:47 来源:WEB开发网   
核心提示: 如果预定义异常集不能满足需求,就可以为特定的SQLSTATE值声明定制异常,DB2存储过程开发最佳实践(7),然后再为这个定制异常声明处理器,语法如下:清单6:定制异常处理器DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate

如果预定义异常集不能满足需求,就可以为特定的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;

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:DB 存储 过程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接