MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLストアドプロシージャにおけるDELIMITERの正しい使い方を徹底解説

DELIMITERとは?なぜ必要なのか

MySQLクライアントは、デフォルトでセミコロン(;)を文の終端記号として扱います。しかし、ストアドプロシージャの本体には複数のSQL文が含まれ、それぞれがセミコロンで終わるため、そのまま定義すると途中で構文解析が中断されてしまいます。

そこで、DELIMITERコマンドを使って、一時的に区切り文字を別の記号(例://)に変更する必要があります。これにより、プロシージャ全体をひとつのまとまりとして登録できるようになります。

DELIMITERの正しい記述方法

基本的な書き方は以下の通りです。

DELIMITER //
CREATE PROCEDURE yourStoredProcedureName()
BEGIN
  IF yourCondition THEN
    yourStatement1;
  ELSE
    yourStatement2;
  END IF;
END
//

DELIMITER ;

ポイントは次の2つです。

  • プロシージャ定義の前に「DELIMITER //」で区切り文字を変更する
  • 定義が完了したら、「DELIMITER ;」で必ず元のセミコロンに戻す

実例:ストアドプロシージャを作成してみよう

それでは、実際にストアドプロシージャを作成する例を見てみましょう。

mysql> DELIMITER //
mysql> CREATE PROCEDURE delimiter_demo()
    -> BEGIN
    -> IF 1 THEN
    -> SELECT "If condition will always true";
    -> ELSE
    -> SELECT "No";
    -> END IF;
    -> END
    -> //
Query OK, 0 rows affected (0.17 sec)

mysql> DELIMITER ;

この例では、条件「1」は常に真と評価されるため、ELSE側の処理は実行されません。定義完了後、「DELIMITER ;」で区切り文字を元に戻している点にも注目してください。

ストアドプロシージャの呼び出し方

作成したストアドプロシージャは、CALLコマンドで呼び出せます。

mysql> CALL delimiter_demo();

実行すると、以下のような結果が出力されます。

+-------------------------------+
| If condition will always true |
+-------------------------------+
| If condition will always true |
+-------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)

まとめ

DELIMITERの使い方の要点を整理すると、以下の通りです。

  • セミコロン以外の区切り文字(//や$$などが一般的)に一時的に変更する
  • ENDの後に変更した区切り文字を置いてプロシージャ定義を閉じる
  • 最後に必ず「DELIMITER ;」で元に戻す

この手順を守ることで、複数のSQL文を含むストアドプロシージャやトリガー、ファンクションもエラーなく定義できるようになります。

  1. MySQLストアドプロシージャで条件分岐を正しく実装する方法を解説

    MySQLストアドプロシージャにおける条件分岐の基本MySQLのストアドプロシージャ内で条件を設定するには、IF ... THEN ... ELSE ... END IF構文を使用します。基本的な書式は以下のとおりです。if yourCondition then yourStatement1; else yourStatement2; end if; end //この構文を使うことで、条件が真(true)の場合はTHEN以降の処理が実行され、偽(false)の場合はELSE以降の処理が実行されます。 実際の実装例それでは、上記の構文をもとに、具体的なストアドプロシージャを作成し

  2. MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法

    MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。 1. サンプルテーブルを作成する まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。 mysql> create table DemoTable