local-declaration
紧接在 BEGIN TRY 后,复合语句可以具有适用于仅在复合语句内使用的对象的本地声明。复合语句可以有变量、游标、临时表或异常的本地声明。局部声明可由该复合语句中的任何语句引用,或者可由该复合语句内嵌套的任何复合语句中的任何语句引用。复合语句的局部声明对语句的异常处理程序可见。本地声明对于从复合语句中调用的其它过程不可见。
BEGIN TRY
DECLARE val INT;
SET val = 0;
INSERT INTO t VALUES( 1 / val );
-- This statement will not be executed
INSERT INTO t VALUES( val );
END TRY
BEGIN CATCH
SET val = 6;
INSERT INTO t VALUES( val );
END CATCH;
如果通过使用 CALL proc1(10); 执行以下过程,则会在表 t 中插入以下值:
-10
10
CREATE PROCEDURE DBA.proc1( v INTEGER )
BEGIN TRY
DECLARE local_val INTEGER = 0;
INSERT INTO t VALUES(-v);
SET local_val = v / local_val;
-- This statement will not be executed
MESSAGE 'The value is ', v;
END TRY
BEGIN CATCH
INSERT INTO t VALUES(v);
END CATCH;