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 ;で元に戻す。
-
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
-
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