我正在尝试在DB2中创建一个执行以下操作的简单存储过程:
基本上,如果表DELETE_ME已经存在,则存储过程执行正常。如果它不存在,则存储过程失败,并显示以下错误:
Lookup Error - DB2 Database Error: ERROR [42704] [IBM][DB2/LINUXX8664] SQL0204N "SARTS02T.DELETE_ME" is an undefined name.
我完全明白这一点。但是,我希望设置该过程以忽略此错误(以及所有错误),这样该过程也可以作为部署脚本工作。在第一次部署时,它将忽略drop table行并向右跳转到构建表。
我发现了一个名为CONTINUE AFTER FAILURE的CREATE PROCEDURE选项但是我收到了一个错误。请在下面查看我的代码和错误。谢谢你的帮助!!!
CODE:
CREATE OR REPLACE PROCEDURE TEST_PROC LANGUAGE SQL CONTINUE AFTER FAILURE
BEGIN
DROP TABLE DELETE_ME;
CREATE TABLE DELETE_ME (
COLUMN_A DECIMAL(5)
);
INSERT INTO DELETE_ME (COLUMN_A) VALUES (69);
COMMIT;
END;
ERROR:
Lookup Error - DB2 Database Error: ERROR [42601] [IBM][DB2/LINUXX8664] SQL0104N An unexpected token "CONTINUE AFTER FAILURE" was found following "ST_PROC LANGUAGE SQL". Expected tokens may include: "<space>".
答案 0 :(得分:0)
BEGIN ... END
部分称为compound statement,它允许将各种声明和其他声明(包括其他复合语句)包含在其中。
您需要声明条件处理程序。你可以这样做。
CREATE OR REPLACE PROCEDURE TEST_PROC
LANGUAGE SQL
COMMIT ON RETURN YES
BEGIN
DECLARE CONTINUE HANDLER FOR SQLSTATE '42704' -- or SQLEXCEPTION
BEGIN
-- insert any code here when DROP fails
END;
DROP TABLE DELETE_ME;
CREATE TABLE DELETE_ME
( COLUMN_A DECIMAL(5)
);
INSERT INTO DELETE_ME (COLUMN_A)
VALUES (69);
END;