SQL BEGINの使い方 トランザクション記述時にデリミタの置き換えが必要なケース
  • facebookページ
  • twitterページ
  • 2020.02.19

    SQL BEGINの使い方 トランザクション記述時にデリミタの置き換えが必要なケース

    SQLのBEGINについてまとめています。

    BEGINには、ストアドファンクション、ストアドプログラム、PL/SQLを記述する場合に括弧(カッコ)代わりに使うケースのほか、トランザクションの開始を表す目的で使います。

    SQLのBEGIN構文

    SQL ServerやAzure SQL Database、Oracle、ProgreSQLでは、一般のSQLの中にBEGIN~ENDを使ったトランザクションを記述できます。

    OracleでのBEGIN構文

    Oracleでは、PL/SQLサブプログラムを記述する際に、BEGINとENDで囲む必要があります。PL/SQL記述中はセミコロン「;」は単に行の区切りとみなされるため実行されません。

    ドット「.」でPL/SQL入力の終わりを指定し、スラッシュ「/」で実行する必要があります。

    参考)Oracle PL/SQLブロックの実行について

    また、Oracleではトランザクションの開始が、他のデータベースと違ってBEGINではなく、SQL規格で定義されたSET TRANSACTIONとなっています。

    【関連記事】
    SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?

    SQL ServerでのBEGIN構文

    SQL Serverでは、BEGINはSQLブロックの開始として使用します。Azure SQL Databaseでも同様です。

    SQL Serverでのストアドプロシジャ記述は、OracleやMySQLのようなデリミタの置き換えは不要です。以下のように、ストアドプロシジャの宣言部と定義部をASで区切って記述します。

    参考)ストアド プロシージャの作成 – SQL Server | Microsoft Docs

    また、トランザクションを明示する場合は、BEGIN TRANSACTOINを使用します。明示しない場合は、SQLを実行するごとに更新内容がテーブルに反映されます。

    MySQLのBEGIN構文

    MySQLでは、ストアドプログラムを記述する際、プログラムの開始と終了をBEGINとENDで囲む必要があります。

    参考)MySQL :: MySQL 5.6 リファレンスマニュアル :: 20.1 ストアドプログラムの定義

    ただし、上記をそのまま実行するとセミコロン「;」が区切り文字として実行され、SET @x = 0;の時点で入力内容がサーバに送信されてエラーとなってしまいます。そのため、区切り文字を再定義する必要があります。

    上記SQLでは、区切り文字(delimiter)をいったん「//」に置き換えたあとストアドプログラムを記述し、「//」でサーバに送信してストアドプログラムを登録しています。登録後、区切り文字をセミコロン「;」に戻しています。

    また、MySQLでのトランザクションにもBEGIN(またはSTART TRANSACTOIN)を使用します。デフォルトでは、SQLが実行されると即テーブルに反映する自動コミットモードが有効になっています。

    PostgreSQLでのBEGIN構文

    PostgreSQLでは、トランザクションの開始をBEGINと記述します。

    参考)PostgreSQL 9.4.5 BEGIN

    BEGINと、BEGIN WORK、BEGIN TRANSACON、START TRANSACTOINは全て同じ意味になります。

    また、PL/SQLを記述する際は、以下のようにBEGINとENDをカッコ代わりに使います。

    まとめ

    ポテパンダの一言メモ
    • SQLのBEGINには、ストアドプロシジャなどの記述の開始を表す意味と、トランザクションの開始を表す2通りがある。
    • ストアドプロシジャ、PL/SQLの記述にはBEGINに対応したENDを記述する。
    • トランザクションの開始を表すBEGINは、SQL規格の標準ではSTART TRANSACTIONと同等。


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE