[MySQL]ストアドプロシージャ(Procedure)の使い方とは?Procedureの表示や削除
![[MySQL]ストアドプロシージャ(Procedure)の使い方とは?Procedureの表示や削除](https://www.fenet.jp/infla/column/wp-content/uploads/2020/04/f81fd2e4c52864042852c112ce927ae2.jpg)
[MySQL]ストアドプロシージャ(Procedure)の使い方とは?
今回は、MySQLでのストアドプロシージャ(Procedure)について説明します。Procedureとは、DBに対する一連の操作をまとめ、関数のように実行できる仕組みです。Procedureには引数や戻り値を指定することもできます。
ここでは、以下のテーブルにProcedureを実行することとします。
1 2 3 4 5 6 7 8 9 10 |
mysql> select * from score_table; +---------+--------+----------+---------+-------------+ | user_id | name | japanese | english | mathematics | +---------+--------+----------+---------+-------------+ | 1 | taro | 56 | 67 | 78 | | 2 | jiro | 76 | 85 | 84 | | 3 | saburo | 34 | 65 | 45 | | 4 | hanako | 74 | 62 | 89 | | 5 | takako | 92 | 68 | 34 | +---------+--------+----------+---------+-------------+ |
MySQLでのProcedureに興味のある方はぜひご覧ください。
引数なし戻り値なし
MySQLでのProcedureの基本的な使い方を紹介します。引数や戻り値の無いシンプルなProcedureの場合、以下のように記述します。
1 2 |
CREATE PROCEDURE Procedure名() クエリ; |
実行するには、「CALL Procedure名()」のように記述します。
それではProcedureを作成します。実際のコマンドを見てみましょう。
1 2 |
mysql> CREATE PROCEDURE sample01() -> SELECT * FROM score_table; |
作成したProcedureを実行します。
1 2 3 4 5 6 7 8 9 10 |
mysql> CALL sample01(); +---------+--------+----------+---------+-------------+ | user_id | name | japanese | english | mathematics | +---------+--------+----------+---------+-------------+ | 1 | taro | 56 | 67 | 78 | | 2 | jiro | 76 | 85 | 84 | | 3 | saburo | 34 | 65 | 45 | | 4 | hanako | 74 | 62 | 89 | | 5 | takako | 92 | 68 | 34 | +---------+--------+----------+---------+-------------+ |
正しく実行できていることが分かります。このようにMySQLでは、Procedureを作成することで関数のように使用できます。
Procedureの表示や削除
MySQLでのProcedure管理方法を紹介します。Procedure一覧を表示するには、以下のコマンドを実行します。
1 |
mysql> SHOW PROCEDURE STATUS; |
特定のProcedureの内容を表示するには、以下のコマンドを実行します。
1 |
mysql> SHOW CREATE PROCEDURE Procedure名; |
Procedureを削除するには、以下のコマンドを実行します。
1 |
mysql> DROP PROCEDURE Procedure名; |
引数あり
MySQLでは、Procedureに引数を指定できます。以下のように記述します。
1 2 |
CREATE PROCEDURE Procedure名(IN 引数 データ型) クエリ; |
それでは実際のコマンドを見てみましょう。
1 2 |
mysql> CREATE PROCEDURE sample02( IN x INT ) -> SELECT * FROM score_table WHERE user_id = x; |
実行すると、以下のようになります。
1 2 3 4 5 6 |
mysql> CALL sample02(2); +---------+------+----------+---------+-------------+ | user_id | name | japanese | english | mathematics | +---------+------+----------+---------+-------------+ | 2 | jiro | 76 | 85 | 84 | +---------+------+----------+---------+-------------+ |
引数を複数指定したい場合は、(IN x INT, IN y INT)のようにカンマ区切りで定義します。このようにMySQLでは、Procedureに引数を指定できます。
戻り値あり
MySQLでは、Procedureに戻り値を指定できます。以下のように記述します。
1 2 |
CREATE PROCEDURE Procedure名(OUT 戻り値 データ型) クエリ; |
それでは実際のコマンドを見てみましょう。
1 2 |
mysql> CREATE PROCEDURE sample03( IN x INT, OUT y INT ) -> SELECT japanese INTO y FROM score_table WHERE user_id = x; |
実行すると、以下のようになります。
1 2 3 4 5 6 7 |
mysql> CALL sample03(3, @y); mysql> SELECT @y; +------+ | @y | +------+ | 34 | +------+ |
戻り値を複数返したい場合は、(OUT x INT, OUT y INT)のようにカンマ区切りで定義します。このようにMySQLでは、Procedureに戻り値を指定できます。
複数クエリ
MySQLでは、Procedureで複数クエリを実行できます。クエリの終端は”;”なので、事前にDELIMITERを変更してProcedureを定義します。その後、DELIMITERを元に戻します。
1 2 3 4 5 6 7 8 |
DELIMITER // CREATE PROCEDURE Procedure名([引数や戻り値]) BEGIN クエリ1; クエリ2; END // DELIMITER ; |
それでは実際のコマンドを見てみましょう。
1 2 3 4 5 6 7 8 9 |
mysql> DELIMITER // mysql> CREATE PROCEDURE sample04( IN x INT, OUT y INT, OUT z INT ) -> BEGIN -> SELECT japanese INTO y FROM score_table WHERE user_id = x; -> SELECT english INTO z FROM score_table WHERE user_id = x; -> END -> // mysql> DELIMITER ; |
実行すると、以下のようになります。
1 2 3 4 5 6 7 |
mysql> CALL sample04(4, @y, @z); mysql> SELECT @y,@z; +------+------+ | @y | @z | +------+------+ | 74 | 62 | +------+------+ |
このようにMySQLでは、Procedureで複数クエリを実行できます。
まとめ
いかがでしたでしょうか。MySQLでのストアドプロシージャ(Procedure)について説明しました。Procedureを利用することで、DBに対する一連の操作をまとめ、関数のように実行できます。ここでは紹介していませんが、INSERTやUPDATE、DELETE文についてもProcedureに記述できます。
ぜひご自身でProcedureを書いて、理解を深めてください。
FEnetを運営しているネプラス株式会社はサービス開始から10年以上
『エンジニアの生涯価値の向上』をミッションに掲げ、
多くのインフラエンジニア・ネットワークエンジニアの就業を支援してきました。
ネプラス株式会社はこんな会社です
秋葉原オフィスにはネプラス株式会社をはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
インフラ業界に特化
ネットワーク・サーバー・データベース等、ITインフラ業界に特化。Cisco Systemsプレミアパートナーをはじめ各種ベンダーのパートナー企業です。
業界を知り尽くしているからこそ大手の取引先企業、経験豊富なエンジニアに選ばれています。
-
正社員なのにフリーランスのような働き方
正社員の方でも希望を聞いたうえでプロジェクトをアサインさせていただいており、フリーランスのような働き方が可能。帰社日もありません。
プロジェクト終了後もすぐに次の案件をご紹介させていただきますのでご安心ください。
-
大手直取引の高額案件
案件のほとんどが大手SIerやエンドユーザーからの直取引のためエンジニアの皆様へに高く還元できています。
Ciscoをはじめ、Juniper、Azure、Linux、AWS等インフラに特化した常時300件以上の案件があります。
-
スキルアップ支援
不要なコストを削減し、その分エンジニアの方へのスキルアップ支援(ネットワーク機器貸出、合格時の受験費用支給など)や給与で還元しています。
受験費用例)CCNP,CCIE:6-20万円、JNCIS:3-4万円、AWS:1-3万円など
※業務に関連する一定の資格のみ。各種条件がありますので詳しくは担当者へにお尋ねください。
-
現給与を保証します!※
前職の給与保証しており、昨年度は100%の方が給与アップを実現。収入面の不安がある方でも安心して入社していただけます。
※適用にはインフラエンジニアの業務経験1年以上、等一定の条件がございます。
-
インセンティブ制度
ネットワーク機器の販売・レンタル事業等、売上に貢献いただいた方にはインセンティブをお支払いしています。
取引先企業とエンジニア側、双方にメリットがあり大変好評をいただいています。
-
社会保険・福利厚生
社員の方は、社会保険を完備。健康保険は業界内で最も評価の高い「関東ITソフトウェア健康保険組合」です。
さらに様々なサービスをお得に利用できるベネフィットステーションにも加入いただきます。
-
東証プライム上場企業グループ
ネプラスは東証プライム上場「株式会社夢真ビーネックスグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
ネプラス株式会社に興味を持った方へ
ネプラス株式会社では、インフラエンジニアを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


MySQL新着案件New Job
サーバ構築・運用設計/東京都渋谷区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収588万~588万円東京都渋谷区(渋谷駅)【高額年収】/基盤運用保守/東京都千代田区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収600万~720万円東京都千代田区(溜池山王駅)【高額年収】/国内クラウドシステムのサーバ運用保守/東京都新宿区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収600万~720万円東京都新宿区(東新宿駅)国内クラウドシステムのサーバ構築のテスター/東京都新宿区/【WEB面談可/インフラサーバ経験者/20~40代の方活躍中】/在宅勤務
年収300万~420万円東京都新宿区(東新宿駅)【高額年収】/社内情報システムインフラ運用保守/Windows/東京都多摩北部/【WEB面談可】/在宅勤務/20代~30代の方活躍中
年収600万~720万円東京都多摩北部(-駅)社内情報システムインフラ構築のテスター/Windows/東京都多摩北部/【WEB面談可】/在宅勤務/20代~30代の方活躍中
年収300万~420万円東京都多摩北部(-駅)