0

「CREATE PROCEDURE」ステートメントを定義せずに、DB2 9.7 で「プロシージャー」を作成したいと考えています。どうやらこれは「コンパイル済み」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

DROP TRIGGERコンパウンド SQL ステートメント内にステートメントを含めることはできません。コンパウンド SQLについては、DB2 の資料を参照してください。

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 に答える