BEGIN ... END (Snowflakeスクリプト)

BEGIN および END は、Snowflakeスクリプトのブロックを定義します。

ブロックの詳細については、 Snowflakeスクリプトのブロックを理解する をご参照ください。

構文

BEGIN
    <statement>;
    [ <statement>; ... ]
[ EXCEPTION <exception_handler> ]
END;
Copy

条件:

statement

ステートメントは、次のいずれかになります。

  • 単一の SQL ステートメント(CALL を含む)。

  • 制御フローステートメント(例: ループ または 分岐 ステートメント)。

  • ネストされた ブロック

exception_handler

例外の処理方法を指定します。 処理の例外EXCEPTION (Snowflakeスクリプト) をご参照ください。

使用上の注意

  • キーワード END の直後には、セミコロンを付けるか、セミコロンが直後にあるラベルを付ける必要があります。

  • キーワード BEGIN の直後にセミコロンを付けることは できません

  • BEGIN および END は通常、ループ構造や分岐構造などの別の言語構造内、またはストアドプロシージャ内で使用されます。ただし、これは必須ではありません。BEGIN/END ブロックは、匿名ブロック内で最上位の構造にできます。

  • ブロックはネストできます。

これは BEGINEND を使用して、関連するステートメントをグループ化する簡単な例です。この例では、2つの関連するテーブルを作成します。

EXECUTE IMMEDIATE $$
BEGIN
    CREATE TABLE parent (ID INTEGER);
    CREATE TABLE child (ID INTEGER, parent_ID INTEGER);
    RETURN 'Completed';
END;
$$
;
Copy

次の例も同様です。ステートメントは、ブロックにグループ化され、そのブロック内にあるトランザクション内にもあります。

EXECUTE IMMEDIATE $$
BEGIN
    BEGIN TRANSACTION;
    TRUNCATE TABLE child;
    TRUNCATE TABLE parent;
    COMMIT;
    RETURN '';
END;
$$
;
Copy

この例では、ステートメントは 分岐 構造内にあります。

IF (both_rows_are_valid) THEN
    BEGIN
        BEGIN TRANSACTION;
        INSERT INTO parent ...;
        INSERT INTO child ...;
        COMMIT;
    END;
END IF;
Copy