Stored procedures DB2—如何创建忽略错误的存储过程?
我试图在DB2中创建一个简单的存储过程,它执行以下操作:Stored procedures DB2—如何创建忽略错误的存储过程?,stored-procedures,error-handling,db2,Stored Procedures,Error Handling,Db2,我试图在DB2中创建一个简单的存储过程,它执行以下操作: 删除表格“删除我” 创建表“删除我” 插入表“删除我” 基本上,如果表DELETE\u ME已经存在,则存储过程可以正常执行。如果不存在,则存储过程将失败,并出现以下错误: Lookup Error - DB2 Database Error: ERROR [42704] [IBM][DB2/LINUXX8664] SQL0204N "SARTS02T.DELETE_ME" is an undefined name. 我完全理解这一点。
Lookup Error - DB2 Database Error: ERROR [42704] [IBM][DB2/LINUXX8664] SQL0204N "SARTS02T.DELETE_ME" is an undefined name.
我完全理解这一点。但是,我希望将该过程设置为忽略此错误(以及所有错误),这样该过程也可以作为部署脚本工作。在第一次部署中,它将忽略drop table行并直接跳转到构建表
我发现了一个名为CONTINUE AFTER FAILURE的创建过程选项,但收到一个错误。请参阅下面我的代码和错误。谢谢你的帮助
代码:
错误:
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>".
Lookup Error-DB2数据库错误:错误[42601][IBM][DB2/LINUXX8664]SQL0104N在“ST_PROC LANGUAGE SQL”之后发现意外的标记“失败后继续”。预期的令牌可能包括:“”。
该开始。。。END
部分称为a,它允许在其中包含各种声明和其他语句,包括其他复合语句
您需要声明一个条件处理程序。你可以这样做
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;
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;