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

MySQLで簡単な関数(CREATE FUNCTION)を作成する方法をわかりやすく解説

MySQLでは、CREATE FUNCTIONコマンドを使用することで、独自の関数を自由に作成できます。本記事では、基本的な構文から実際の動作確認まで、具体例を交えながらステップバイステップで解説します。

CREATE FUNCTIONの基本構文

MySQLでユーザー定義関数を作成する場合、以下のような構文を使用します。

delimiter //
DROP FUNCTION if exists yourFunctionName;
CREATE FUNCTION yourFunctionName(Parameter1,...N) returns type
BEGIN
# 変数の宣言
# MySQL文
END //
delimiter ;

ポイントは、デリミタ(区切り文字)を一時的に変更してストアドプログラム内のセミコロンと衝突しないようにすることです。処理が完了したら、最後にdelimiter ;で元に戻すことを忘れないようにしましょう。

サンプルテーブルの作成

まず、関数の動作を確認するためのテーブルを作成し、レコードを挿入していきます。以下がテーブル作成用のクエリです。

mysql> create table ViewDemo
-> (
-> Id int,
-> Name varchar(200),
-> Age int
-> );
Query OK, 0 rows affected (0.58 sec)

レコードの挿入

次に、INSERTコマンドでテーブルにデータを追加します。

mysql> insert into ViewDemo values(1,'John',23);
Query OK, 1 row affected (0.15 sec)

mysql> insert into ViewDemo values(2,'Sam',24);
Query OK, 1 row affected (0.15 sec)

登録データの確認

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from ViewDemo;

実行結果は以下の通りです。

+------+------+------+
| Id | Name | Age |
+------+------+------+
| 1 | John | 23 |
| 2 | Sam | 24 |
+------+------+------+
2 rows in set (0.00 sec)

検索用の関数を作成する

ここからが本題です。整数型の引数を受け取り、文字列を返すシンプルな関数を作成します。この関数の目的は、指定されたIDに一致するレコードを検索し、該当すれば名前を返し、見つからなければ「not found」というエラーメッセージ的な文字列を返すことです。

なお、バイナリログが有効な環境で関数を作成する際は、事前にlog_bin_trust_function_creatorsシステム変数を設定しておく必要がある場合があります。

mysql> SET GLOBAL log_bin_trust_function_creators = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> drop function if exists searchRecord;
->
-> create function searchRecord(yourId int) returns char(100)
-> begin
-> declare Name1 char(100) default "No Name Found For This Id";
-> select Name into Name1 from ViewDemo where Id =yourId;
-> return Name1;
-> end //
Query OK, 0 rows affected (0.21 sec)
Query OK, 0 rows affected (0.33 sec)
mysql> delimiter ;

この関数では、DECLARE文でデフォルト値を持つ変数Name1を宣言しています。SELECT ... INTO構文で該当する名前を取得できなければ、デフォルト値の「No Name Found For This Id」がそのまま返される仕組みです。

関数の動作確認

それでは、作成した関数が正しく機能するかを確認しましょう。

ケース1:IDが存在する場合

ID「2」を指定して関数を呼び出します。

mysql> select searchRecord(2) as Found;

実行結果:

+-------+
| Found |
+-------+
| Sam |
+-------+
1 row in set (0.00 sec)

ID「2」に対応する「Sam」という名前が正しく返されました。

ケース2:IDが存在しない場合

次に、テーブルに存在しないID「100」を指定してみます。

mysql> select searchRecord(100) as Found;

実行結果:

+---------------------------+
| Found |
+---------------------------+
| No Name Found For This Id |
+---------------------------+
1 row in set (0.00 sec)

このように、該当するレコードが存在しない場合は、あらかじめ設定しておいたメッセージが返されることが確認できます。

まとめ

MySQLのCREATE FUNCTIONを使えば、繰り返し利用する処理を関数としてまとめることができます。今回の例のように、IDによるレコード検索などの単純な処理でも、関数化しておくことでSQL文が簡潔になり、保守性も向上します。ぜひ実際のプロジェクトでも活用してみてください。

  1. MySQLコマンドラインでデータベースを作成する方法を初心者向けに解説

    MySQLコマンドラインでデータベースを作成する手順 この記事では、WindowsのコマンドプロンプトからMySQLに接続し、データベースを作成する一連の手順をスクリーンショット付きで解説します。初心者の方でも迷わず進められるよう、順番に見ていきましょう。 1. コマンドプロンプトを開く まず、コマンドプロンプトを起動します。キーボードのショートカット「Windows + R」キーを押すと、「ファイル名を指定して実行」ダイアログが表示されます。 2. 「CMD」と入力してOKをクリック 表示された入力欄に CMD と入力し、「OK」ボタンをクリックしてください。 3. コマンドプロンプトが

  2. MySQLでシーケンスを作成する方法|AUTO_INCREMENTの使い方とルールを解説

    MySQLにおけるシーケンスとは?MySQLにおける「シーケンス」とは、1(指定した場合は0)から始まり、昇順で自動生成される整数の連番のことです。多くのアプリケーションでは、レコードを一意に識別するための番号を発行する目的でシーケンスが利用されています。具体例代表的な例としては、CRMシステムの顧客ID、人事管理システムの社員番号、設備管理システムの機器番号などが挙げられます。MySQLでシーケンスを自動的に作成するには、対象のカラムにAUTO_INCREMENT属性を設定します。通常は、主キー(PRIMARY KEY)カラムに対して適用するのが一般的です。AUTO_INCREMENTを使用