gpt4 book ai didi

stored-procedures - DB2-如何创建一个忽略错误的存储过程?

转载 作者:行者123 更新时间:2023-12-03 08:57:05 25 4
gpt4 key购买 nike

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

  • 删除表“DELETE_ME”
  • 创建表“DELETE_ME”
  • 插入表“DELETE_ME”

  • 基本上,如果表DELETE_ME已经存在,则存储过程将正常执行。如果它不存在,则存储过程将失败,并显示以下错误:
    Lookup Error - DB2 Database Error: ERROR [42704] [IBM][DB2/LINUXX8664] SQL0204N  "SARTS02T.DELETE_ME" is an undefined name.

    我完全明白这一点。但是,我希望将过程设置为忽略该错误(以及所有错误),以使该过程也可以作为部署脚本工作。在第一个部署中,它将忽略放置表行并直接跳至构建表。

    我找到了一个名为CONTINUE AFTER FAILURE的CREATE PROCEDURE选项,但是我收到一个错误。请在下面查看我的代码和错误。谢谢你的帮助!!!

    码:
    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;

    错误:
    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>".

    最佳答案

    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;

    关于stored-procedures - DB2-如何创建一个忽略错误的存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21144539/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com