MySQLのDELIMITER(区切り文字)を使ってストアドプロシージャを作成・実行する方法
MySQLでは、CREATE PROCEDUREコマンドを使用することでストアドプロシージャを作成できます。ストアドプロシージャの中には複数のSQL文が含まれますが、そのまま定義すると文の区切りを示すセミコロン(;)がプロシージャ本体の途中で解釈されてしまいます。そこで、一時的に区切り文字を変更する必要があります。
基本的な構文
delimiter // CREATE PROCEDURE yourStoreProcedureName() BEGIN -- ここで変数を宣言します -- クエリ文を記述します END // delimiter ;
ストアドプロシージャの作成例
上記の構文に従って、実際にストアドプロシージャを作成してみましょう。まず対象となるデータベースを選択し、区切り文字を変更してからプロシージャを定義します。
mysql> use test;
Database changed
mysql> delimiter //
mysql> create procedure Sp_callTableStoredProcTable()
-> begin
-> select * from StoredProcTable;
-> end //
Query OK, 0 rows affected (0.54 sec)
区切り文字を元に戻す
ストアドプロシージャの作成が完了したら、区切り文字をセミコロン(;)に戻しておきましょう。これにより、以降の通常のSQL文が正しく実行できるようになります。
mysql> delimiter ;
ストアドプロシージャの呼び出し方
作成したストアドプロシージャは、CALLコマンドを使用して呼び出します。基本構文は以下の通りです。
CALL yourStoredProcedureName();
先ほど作成したストアドプロシージャを、次のようにCALLコマンドで実行してみます。
mysql> call Sp_callTableStoredProcTable();
実行結果
+-----------+------+ | FirstName | Age | +-----------+------+ | John | 23 | | Bob | 24 | | David | 20 | +-----------+------+ 3 rows in set (0.03 sec) Query OK, 0 rows affected (0.06 sec)
この例では「StoredProcTable」というテーブルを使用しています。このテーブルには3件のレコードが登録されており、ストアドプロシージャを実行することですべてのレコードが表示されました。
レコード数をカウントするストアドプロシージャ
テーブル内のレコード数を確認するストアドプロシージャも同様の手順で作成できます。
mysql> delimiter //
mysql> create procedure CountingRecords()
-> begin
-> select count(*) as AllRecords from StoredProcTable;
-> end //
Query OK, 0 rows affected (0.19 sec)
mysql> delimiter ;
作成したプロシージャをCALLコマンドで呼び出します。
mysql> call CountingRecords();
実行結果
+------------+ | AllRecords | +------------+ | 3 | +------------+ 1 row in set (0.31 sec) Query OK, 0 rows affected (0.33 sec)
実行結果から、テーブル内のレコード数が「3」であることを確認できました。
まとめ
MySQLでストアドプロシージャを作成する際は、delimiterコマンドで区切り文字を変更し、BEGIN〜ENDまでをひとまとまりとして定義することがポイントです。作成後は区切り文字を元のセミコロンに戻し、CALLコマンドで呼び出して利用します。この手順を覚えておくと、定型処理の自動化やデータベース操作の効率化に役立ちます。
-
MySQL Workbenchでストアドプロシージャを作成・実行する方法
MySQL Workbenchでストアドプロシージャを作成する手順 まずは、ストアドプロシージャを作成してみましょう。以下は、MySQL Workbenchを使用してストアドプロシージャを作成するためのクエリ例です。 use business; DELIMITER // DROP PROCEDURE IF EXISTS SP_GETMESSAGE; CREATE PROCEDURE SP_GETMESSAGE() BEGIN DECLARE MESSAGE VARCHAR(100); SET MESSAGE="HELLO"; SELECT CONCAT(MESSAGE, ,
-
MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法
MySQLストアドプロシージャでSHOW CREATE TABLEを実行する方法 ストアドプロシージャの中でSHOW CREATE TABLEを実行したい場合は、動的SQL(プリペアドステートメント)を利用します。SHOW系のコマンドはプロシージャ内に直接記述できないため、SQL文を文字列として組み立てて実行するのがポイントです。 まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable2011 -> ( -> StudentId int NOT NULL AUTO_INCREMENT, -> St