0

我想在 DB2 9.7 中编写“过程”而不定义“CREATE PROCEDURE”语句。显然这是一种叫做“编译”的 sql 语句。但是,我在获取有效语法时遇到了问题。例如,下面的语法似乎不起作用:

BEGIN
    DECLARE V_SQL VARCHAR(1024);
    SET V_SQL = 'BEGIN
    IF EXISTS(SELECT NAME FROM SYSIBM.SYSTRIGGERS WHERE NAME = ''TRIGGER_EMPLOYEE_FOR_DELETES'') THEN
    DROP TRIGGER TRIGGER_EMPLOYEE_FOR_DELETES;
    END IF;
    END;';

    PREPARE S1 FROM V_SQL;
    EXECUTE S1;
END

我试过添加/删除“;” 和声明符号“!” 但仍然无法让它工作。

4

1 回答 1

1

复合 SQL 语句中不能有DROP TRIGGER语句。请参阅DB2 文档以了解复合 SQL

如果您能够将IF语句移到 之外V_SQL,则可以执行以下操作:

BEGIN
    DECLARE V_SQL VARCHAR(1024);
    IF EXISTS(SELECT NAME FROM SYSIBM.SYSTRIGGERS 
                  WHERE NAME = 'TRIGGER_EMPLOYEE_FOR_DELETES'
    ) THEN
        SET V_SQL = 'DROP TRIGGER TRIGGER_EMPLOYEE_FOR_DELETES;';
        PREPARE S1 FROM V_SQL;
        EXECUTE S1;
    END IF;
END

当然,如果您需要动态设置条件,这将不起作用。

于 2012-08-20T12:20:02.227 回答