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

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で確認する、という使い方が基本のパターンとなります。

  1. MySQLでCOUNTを使ったSELECT文の実行方法を徹底解説

    MySQLでSELECT文とCOUNTを組み合わせてデータ件数を集計したい場合は、集計関数であるCOUNT()を使用します。さらにGROUP BY句と組み合わせることで、グループごとのレコード数を簡単に取得できます。この記事では、実際にテーブルを作成し、COUNT()を使った集計クエリの実行手順をサンプルコード付きで順を追って解説します。1. サンプルテーブルを作成するまずは、動作確認用のテーブルを作成しましょう。以下のSQLでは、Id・Name・Subjectの3つのカラムを持つ「DemoTable」を作成しています。mysql> create table DemoTable

  2. MySQLストアドプロシージャで2つのSELECTステートメントを実行する方法

    MySQLストアドプロシージャで複数のSELECTステートメントを実行する方法 MySQLのストアドプロシージャには、複数のSELECTステートメントを含めることができます。プロシージャを呼び出すと、含まれているSELECTステートメントの結果セットが順番に返されます。ここでは、2つのSELECTステートメントを持つストアドプロシージャの作成手順を解説します。 ストアドプロシージャの作成 まず、DELIMITERコマンドで区切り文字を変更してから、ストアドプロシージャを定義します。 mysql> DELIMITER // mysql> CREATE PROCEDURE selec