WEB开发网
开发学院数据库DB2 DB2 9.5 SQL Procedure Developer认证考试 735 准... 阅读

DB2 9.5 SQL Procedure Developer认证考试 735 准备,第1部分

 2010-02-16 14:59:34 来源:WEB开发网   
核心提示:异常处理机制DECLARE 有名称的条件SQL PL 允许为给定的SQLSTATE 声明用户命名的条件,以用于之后的错误处理,DB2 9.5 SQL Procedure Developer认证考试 735 准备,第1部分(7),条件名称在整个复合语句中必须是惟一的,并且只能在声明它的复合语句中引用它,如果发生值溢出,D

异常处理机制

DECLARE 有名称的条件

SQL PL 允许为给定的SQLSTATE 声明用户命名的条件,以用于之后的错误处理。条件名称在整个复合语句中必须是惟一的,并且只能在声明它的复合语句中引用它。

清单 16 显示了声明一个有名称的条件的语法。

清单 16. 声明一个有名称的条件的语法

|--DECLARE--condition-name--CONDITION--FOR---------------------->
       .-VALUE-.
           .-SQLSTATE--+-------+-.
>--+---------------------+--string-constant---------------------|

下面是条件声明的例子:

DECLARE FOREIGN_KEY_VIOLATION CONDITION FOR SQLSTATE ‘23503’;
DECLARE overflow CONDITION FOR SQLSTATE '22003';

DECLARE 条件处理程序

如果发生一个错误,存储过程的行为是根据条件处理程序来决定的。在一个存储过程中,可以为一个普通的或有名称的条件和特定的SQLSTATE 声明一个或多个条件处理程序。当一个SQL语句产生一个SQLEXCEPTION 或 SQLWARNING(SQLCODE <> 0)时,控制被转移到为一个声明的处理程序中,以获取普通的异常或特定的SQLSTATE 值。

清单 17 显示了受支持的处理程序声明的语法。

清单 17.处理程序声明的语法

|--DECLARE--+-CONTINUE-+--HANDLER--FOR-------------------------->
      +-EXIT-----+
                '-UNDO-----'
>--+-specific-condition-value-+--| SQL-procedure-statement |----|
 '-general-condition-value--'
WHERE specific-condition-value
 .-,----------------------------------------.
           V       .-VALUE-.          |
|----+-SQLSTATE--+-------+--string-constant-+-+-----------------|
  '-condition-name-----------------------'

下面是演示它如何工作的一些例子。在下面的过程中,如果 UPDATE语句失败,则控制被转移到 EXIT处理程序。结果,该过程被终止,但是它的输出参数包含SQLCODE 和 SQLSTATE 的值。

清单 18. 返回 SQLCODE 和 SQLSTATE 的处理程序的例子

CREATE PROCEDURE simple_erroR
   (IN new_job CHAR(8), IN p_empno CHAR(6),
    OUT p_state_out CHAR(5),OUT p_code_out INT)
SPECIFIC simple_error1
BEGIN
   DECLARE SQLCODE INT DEFAULT 0;
   DECLARE SQLSTATE CHAR(5) DEFAULT ‘00000’;
   DECLARE EXIT HANDLER FOR SQLEXCEPTION
      SELECT SQLSTATE, SQLCODE
       INTO p_sqlstate_out, p_sqlcode_out
       FROM SYSIBM.SYSDUMMY1;
   UPDATE EMPLOYEE
     SET job = new_job
    WHERE empno = p_empno;
END

请注意,SQLCODE 和 SQLSTATE 应该被显式地声明为本地变量。

清单 19 演示了一个场景,在此场景中,当一个给定的错误发生时,不是退出过程,而是继续某个动作。为了理解这个例子,请注意表 TAB1 被定义为(col1 int, col2 char(5)),在默认情况下,如果发生值溢出,DB2不是截短一个值,而是产生SQLSTATE ‘22001’。

清单 19. 具有CONTINUE处理程序的过程

CREATE PROCEDURE proc1 (IN num int, IN new_status varchar(10))
P1: BEGIN
  DECLARE SQLCODE INTEGER default 0;
  DECLARE SQLSTATE CHAR(5) default ‘ ‘;
  DECLARE v_trunc INTEGER default 0;
  DECLARE overflow CONDITION FOR SQLSTATE '22001';
  DECLARE CONTINUE HANDLER FOR overflow
    BEGIN
      INSERT INTO tab1 VALUES (num, substr (new_sataus,1,5));
      SET v_trunc = 2;
    END;
  INSERT INTO tab1 VALUES(num, new_status);
  RETURN v_trunc;
END P1

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

Tags:DB SQL Procedure

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