MySQLでIN・OUTパラメータを使い条件に応じて値を取得するストアドプロシージャの作成方法
MySQLでは、INパラメータとOUTパラメータを組み合わせたストアドプロシージャを作成することで、指定した条件に基づいてテーブルからレコードを取得し、その結果を呼び出し元に返すことができます。
この記事では、例として以下のようなデータを持つ「student_info」テーブルを使用して、具体的な手順を解説します。
サンプルデータ:student_infoテーブル
mysql> Select * from student_info; +------+---------+------------+------------+ | id | Name | Address | Subject | +------+---------+------------+------------+ | 101 | YashPal | Amritsar | History | | 105 | Gaurav | Jaipur | Literature | | 110 | Rahul | Chandigarh | History | | 125 | Raman | Bangalore | Computers | +------+---------+------------+------------+ 4 rows in set (0.01 sec)
ストアドプロシージャの作成手順
ここでは、「id」の値をINパラメータとして受け取り、該当するレコードの「name」「address」「subject」をOUTパラメータとして返す「Select_studentinfo」というプロシージャを作成します。
mysql> DELIMITER // ;
mysql> Create Procedure Select_studentinfo ( IN p_id INT, OUT p_name varchar(20),OUT p_address varchar(20), OUT p_subject varchar(20))
-> BEGIN
-> SELECT name, address, subject INTO p_name, p_address, p_subject
-> FROM student_info
-> WHERE id = p_id;
-> END //
Query OK, 0 rows affected (0.03 sec)
ポイント:
DELIMITER //は、プロシージャ本体の中でセミコロン(;)が使えるように、一時的に区切り文字を変更するためのコマンドです。IN p_id INTは、呼び出し時に外部から渡される入力値です。SELECT ... INTO ...構文により、検索結果が各OUTパラメータに格納されます。
プロシージャの実行方法
プロシージャの作成後は、区切り文字を元に戻してから、CALLステートメントで実行します。条件となるidの値として「110」を指定してみましょう。
mysql> DELIMITER ; // mysql> CALL Select_studentinfo(110, @p_name, @p_address, @p_subject); Query OK, 1 row affected (0.06 sec) mysql> Select @p_name AS Name,@p_Address AS Address, @p_subject AS Subject; +--------+------------+-----------+ | Name | Address | Subject | +--------+------------+-----------+ | Rahul | Chandigarh | History | +--------+------------+-----------+ 1 row in set (0.00 sec)
実行結果の見方:
@p_name、@p_address、@p_subjectはユーザー定義変数で、OUTパラメータの結果を受け取ります。AS Nameなどにより、結果セットの列名を見やすい形で表示しています。- id=110のレコード(Rahul/Chandigarh/History)が正しく取得できていることがわかります。
まとめ
このように、INパラメータで条件値を受け取り、OUTパラメータで結果を返すストアドプロシージャを作成すれば、アプリケーション側から簡単に特定レコードの抽出処理を再利用できるようになります。検索条件が固定のクエリを何度も実行する場合や、複数のシステムから同じロジックを呼び出したい場合に特に有効です。
-
MySQLで特定のキーワードを含むレコードをテーブルから抽出する方法(LIKE演算子の使い方)
MySQLでキーワードを含むレコードを抽出するには?テーブル内のカラム値に特定のキーワードが含まれているレコードだけを取得したい場合があります。そのようなときは、LIKE演算子を使用します。LIKE演算子は「%」などのワイルドカードと組み合わせることで、部分一致検索を簡単に行えるのが特徴です。ここでは、実際にテーブルを作成し、キーワード「MySQL」を含むレコードを抽出する手順を見ていきましょう。1. テーブルを作成するまずはサンプル用のテーブルを作成します。mysql> create table DemoTable750 (Title varchar(200));Query OK, 0
-
MySQLでNOT IN()を使ってテーブルから特定の値を除外する方法
MySQLでは、NOT IN()句を使用することで、テーブルから特定の値を除外してデータを取得できます。条件に含めたくない値をリストで指定するだけで、それらを除いたレコードを簡単に抽出できます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable791 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, FirstName varchar(100) ); Query OK, 0 rows affected (0.61 sec)テストデータの挿入次に、INSERTコマ