MySQLストアドプロシージャでDELIMITER(区切り文字)を正しく使って値を挿入する方法
MySQLでストアドプロシージャを作成する際、DELIMITER(区切り文字)の扱いに戸惑う方は少なくありません。デフォルトではMySQLクライアントがセミコロン「;」を文の終端として解釈するため、プロシージャ内の複数のSQL文が途中で分割されてしまうことがあります。本記事では、区切り文字を正しく変更しながら、ストアドプロシージャを使ってテーブルへ値を挿入する具体的な手順を解説します。
1. サンプルテーブルを作成する
まず、データを挿入するためのテーブルを作成します。ここでは学生の名前と姓を格納するテーブルを用意しました。
mysql> create table DemoTable2028
-> (
-> StudentFirstName varchar(20),
-> StudentLastName varchar(20)
-> );
Query OK, 0 rows affected (0.87 sec)
2. DELIMITERを変更してストアドプロシージャを作成する
次に、区切り文字を「//」に変更してからストアドプロシージャを作成します。これにより、プロシージャ内部のINSERT文末尾にあるセミコロンが誤って文の終端とみなされるのを防ぐことができます。
mysql> delimiter //
mysql> create procedure insert_name(in fname varchar(20),in lname varchar(20))
-> begin
-> insert into DemoTable2028 values(fname,lname);
-> end
-> //
Query OK, 0 rows affected (0.17 sec)
mysql> delimiter ;
DELIMITER使用時のポイント
delimiter //で一時的に区切り文字を「//」へ変更します。end //の行で初めてプロシージャ定義全体が完了したと認識されます。- 作成後は
delimiter ;で元のセミコロンに戻すのを忘れないようにしましょう。
3. ストアドプロシージャを呼び出す
作成したプロシージャは、CALLコマンドで実行できます。引数として名前と姓を渡します。
mysql> call insert_name('Chris','Brown');
Query OK, 1 row affected (0.17 sec)
4. 挿入結果を確認する
SELECT文でテーブルの全レコードを表示し、データが正しく挿入されたかを確認しましょう。
mysql> select *from DemoTable2028;
実行結果は以下の通りです。
+------------------+-----------------+
| StudentFirstName | StudentLastName |
+------------------+-----------------+
| Chris | Brown |
+------------------+-----------------+
1 row in set (0.00 sec)
まとめ
ストアドプロシージャを作成するときは、プロシージャ本体に含まれるセミコロンがMySQLクライアントによって誤解釈されないよう、delimiterコマンドで区切り文字を一時的に変更することが重要です。作成後は必ず区切り文字を「;」に戻し、通常どおりSQLを実行できる状態にしておきましょう。この手順を押さえておけば、複数のSQL文を含むプロシージャも安全に定義・実行できます。
-
MySQLストアドプロシージャで2つの値を宣言し、数学演算を実行する方法
MySQLストアドプロシージャで変数を宣言して演算を行う方法 MySQLのストアドプロシージャでは、DECLARE文を使ってローカル変数を宣言し、SET文で値を代入することができます。ここでは、2つの整数型の値を宣言し、その積(掛け算)を計算して表示するストアドプロシージャの作成手順を、サンプルコードとともに解説します。 1. ストアドプロシージャの作成 まず、delimiterコマンドでステートメントの区切り文字を変更し、ストアドプロシージャを作成します。 mysql> delimiter // mysql> create procedure declare_demo_sp()
-
MySQLストアドプロシージャでテーブルにデータを挿入する方法
MySQLのストアドプロシージャを使ってテーブルにデータを挿入するには、以下のような構文を使用します。create procedure yourProcedureName(OptionalParameter) begin insert into yourTableName() values(yourValue1,yourValue2,...N); endサンプルテーブルの作成まずは、この構文を実際に理解するために、テスト用のテーブルを作成してみましょう。mysql> create table DemoTable1928 ( Id int NOT NULL