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

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コマンドで呼び出して利用します。この手順を覚えておくと、定型処理の自動化やデータベース操作の効率化に役立ちます。

  1. 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, ,

  2. 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