【发布时间】:2014-11-17 21:09:16
【问题描述】:
我正在尝试制作一个简单的脚本来处理可以正常失败的语句中的错误。这是针对 DB2 v10.5 (Linux)
示例创建表并在表已存在时处理
begin
DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' BEGIN END;
EXECUTE IMMEDIATE 'CREATE TABLE T(c1 INT)';
end
/
这个没问题
现在我有一个稍微复杂的块,它最初使用局部变量,我试图添加 DECLARE CONTINUE HANDLER,但我无法编译它。简化问题我发现,如果我有 Handler 行,则在开始之前添加声明语句会失败(请注意,我在这里没有使用 localVariable,但仅通过添加该语句就会失败。如果我在没有 DECLARE CONTINUE HANDLER 的情况下运行相同的语句,它也运行正常
declare
localVariable INT;
begin
DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' BEGIN END;
EXECUTE IMMEDIATE 'CREATE TABLE T(c1 INT)';
end
/
产生的错误代码
错误报告:DB2 SQL 错误:SQLCODE=-104,SQLSTATE=42601, SQLERRMC=end;end;BEGIN, DRIVER=3.68.61
【问题讨论】:
-
不要混合使用 PL/SQL 和 DB2 SQL PL 语法。选择其中一个并始终如一地使用它。
-
什么是正确的 DB2 SQL 语法?如果我尝试 BEGIN DECLARE CONTINUE HANDLER FOR SQLSTATE '42710' BEGIN END;声明变量 1 INT;立即执行'创建表 T(c1 INT)'; END / - 这也会导致 42601 错误。
-
你试过手册了吗?变量声明必须在处理程序声明之前。 www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/…
-
谢谢,您想发布您的 cmets 作为答案吗?