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

MySQLのDELIMITERにセミコロン(;)は使用できる?

結論から言うと、MySQLのDELIMITERとしてセミコロン(;)を使用することはできません。セミコロンを区切り文字のままストアドプロシージャを作成しようとしても、プロシージャは正常に作成されません。

これは、ストアドプロシージャの本体(BEGIN〜END内)でも文の終端としてセミコロンが使われるためです。クライアント側が先にセミコロンを文の終わりと判断してしまい、プロシージャ全体を一つのまとまりとして認識できなくなるのが原因です。

そのため、ストアドプロシージャを作成する前に、まずDELIMITERをセミコロン(;)から別の記号(// など)へ変更する必要があります。

DELIMITER変更時の基本構文

DELIMITER //
CREATE PROCEDURE yourProcedureName()
BEGIN
 yourStatement1;
 .
 .
 .
 yourStatementN;
END
//
DELIMITER ;

実際にストアドプロシージャを作成してみる

上記の構文に従って、実際にストアドプロシージャを作成してみましょう。

mysql> DELIMITER //
mysql> CREATE PROCEDURE get_Message()
    -> BEGIN
    -> SELECT CONCAT("HELLO"," ","MYSQL USERS");
    -> END
    -> //
Query OK, 0 rows affected (0.23 sec)
mysql> DELIMITER ;

このように、最初に DELIMITER // で区切り文字を変更し、プロシージャの定義が終わったら最後に DELIMITER ; で元のセミコロンに戻すのがポイントです。

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

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

mysql> CALL get_Message();

実行結果

上記のコマンドを実行すると、次のような出力が得られます。

+-----------------------------------+
| CONCAT("HELLO"," ","MYSQL USERS") |
+-----------------------------------+
| HELLO MYSQL USERS                 |
+-----------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)

まとめ

  • MySQLのDELIMITERにセミコロン(;)は使用できない。
  • ストアドプロシージャ作成前に、DELIMITERを「//」などの別の記号へ変更する必要がある。
  • 定義完了後は、忘れずに DELIMITER ; で元に戻す。
  1. MySQLクエリでSELECT NULLステートメントは使用できる?具体例で解説

    MySQLのSELECT文でNULLを取得できるのか?結論から言うと、はい、MySQLのクエリではSELECT NULLステートメントを使用できます。NULLをそのまま選択対象として指定すると、結果セットにはNULL値が返されます。この記事では、実際にテーブルを作成し、SELECT NULLがどのように動作するのかを順を追って確認していきます。1. テーブルの作成まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable ( Name varchar(100) ); Query OK, 0 rows affected (0.49 sec

  2. MySQLクエリで「LIKE concat()」を使用することはできる?

    はい、MySQLではLIKE句とconcat()関数を組み合わせて使用することが可能です。concat()関数で動的にパターン文字列を生成し、それをLIKE句の検索条件として利用できます。実際にサンプルを使って手順を見ていきましょう。まず、テーブルを作成します。mysql> create table DemoTable ( Name varchar(50) ); Query OK, 0 rows affected (0.63 sec)次に、insertコマンドを使ってテーブルにレコードを挿入します。mysql> insert into DemoTable values(Jo