DB2 9.5 SQL Procedure Developer认证考试 735 准备,第1部分
2010-02-16 14:59:34 来源:WEB开发网异常处理机制
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
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接