Stored procedures 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. 我完全理解这一点。

我试图在DB2中创建一个简单的存储过程,它执行以下操作:

  • 删除表格“删除我”
  • 创建表“删除我”
  • 插入表“删除我”
  • 基本上,如果表DELETE\u ME已经存在,则存储过程可以正常执行。如果不存在,则存储过程将失败,并出现以下错误:

    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;