MySQLでSELECTステートメントを使ってストアドプロシージャを呼び出す方法
MySQLでは、FROM句の中でストアドプロシージャを直接指定してSELECTすることはできません。代わりにCALLコマンドを使ってプロシージャを呼び出し、その後でSELECTステートメントを実行して結果を確認する流れになります。
この記事では、実際にテーブルとストアドプロシージャを作成し、CALLで呼び出してからSELECTでデータを取得するまでの手順を順番に解説します。
1. サンプルテーブルを作成する
まずはデータを格納するためのテーブルを作成しましょう。以下の例では、顧客ID・顧客名・出荷日時を持つテーブルを定義しています。
mysql> create table DemoTable2
-> (
-> CustomerId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> CustomerName varchar(100),
-> ShippingDateTime datetime
-> );
Query OK, 0 rows affected (0.66 sec)2. ストアドプロシージャを作成する
次に、顧客名と出荷日時を受け取ってテーブルにINSERTするストアドプロシージャを作成します。プロシージャ本体を定義する際は、あらかじめDELIMITER //で区切り文字を変更しておくのがポイントです。
mysql> DELIMITER //
mysql> CREATE PROCEDURE insert_information(Name varchar(100),shippingtime datetime)
-> BEGIN
->
-> INSERT INTO DemoTable2(CustomerName,ShippingDateTime) VALUES(Name,shippingtime);
-> END
-> //
Query OK, 0 rows affected (0.16 sec)
mysql> DELIMITER ;3. CALLコマンドでストアドプロシージャを呼び出す
作成したプロシージャは、CALLコマンドに引数を渡すことで実行できます。ここでは「Chris」という顧客名と現在日時(NOW())を渡してみましょう。
mysql> call insert_information('Chris',NOW());
Query OK, 1 row affected, 1 warning (0.15 sec)4. SELECTステートメントで結果を確認する
プロシージャの呼び出しが完了したら、通常どおりSELECTステートメントを実行してテーブルの内容を表示できます。
mysql> select *from DemoTable2;
実行すると、以下のような結果が出力されます。
+------------+--------------+---------------------+ | CustomerId | CustomerName | ShippingDateTime | +------------+--------------+---------------------+ | 1 | Chris | 2019-04-08 15:03:07 | +------------+--------------+---------------------+ 1 row in set (0.00 sec)
まとめ
MySQLではFROM句にストアドプロシージャを直接記述できないため、「CALLで呼び出す → SELECTで結果を取得する」という2段階の手順が必要です。プロシージャ内でINSERTや更新処理を行い、その結果をSELECTで確認する、という使い方が基本のパターンとなります。
-
MySQLでCOUNTを使ったSELECT文の実行方法を徹底解説
MySQLでSELECT文とCOUNTを組み合わせてデータ件数を集計したい場合は、集計関数であるCOUNT()を使用します。さらにGROUP BY句と組み合わせることで、グループごとのレコード数を簡単に取得できます。この記事では、実際にテーブルを作成し、COUNT()を使った集計クエリの実行手順をサンプルコード付きで順を追って解説します。1. サンプルテーブルを作成するまずは、動作確認用のテーブルを作成しましょう。以下のSQLでは、Id・Name・Subjectの3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable
-
MySQLストアドプロシージャで2つのSELECTステートメントを実行する方法
MySQLストアドプロシージャで複数のSELECTステートメントを実行する方法 MySQLのストアドプロシージャには、複数のSELECTステートメントを含めることができます。プロシージャを呼び出すと、含まれているSELECTステートメントの結果セットが順番に返されます。ここでは、2つのSELECTステートメントを持つストアドプロシージャの作成手順を解説します。 ストアドプロシージャの作成 まず、DELIMITERコマンドで区切り文字を変更してから、ストアドプロシージャを定義します。 mysql> DELIMITER // mysql> CREATE PROCEDURE selec