【MySQL】ストアドファンクションの作成方法

スポンサーリンク

MySQLのストアドファンクション(function)作成方法についてご紹介します。

ストアドファンクション(funciton)とは

以前プロシージャについてご紹介しましが、プロシージャが一連の手続きを行うのに対して、ストアドファンクションはDBに対する関数になります。

ストアドファンクションは戻り値があるので、DBから値を取得することができます。

 

プロシージャについては以下の記事で説明していますので、お時間ある方はご参考ください。

定義方法や使用方法はプロシージャとほぼ同じです。

ストアドファンクション(funciton)の使い方

プロジェクトによって異なりますが、僕の経験としてはコードテーブルに対する値取得が多いです。

プロシージャは色々な手続きができるので使い方も様々ですが、ファンクションはDBからの値取得が多いですね。

戻り値が指定できるので当たり前と言えば当たり前ですね。

定義方法

プロシージャとほぼ同じ定義方法です。

注意点は戻り値の型をRETURNS varchar(11)で指定している点です。

また、RETURN @name;で何を戻り値にするかも指定します。

yasu
yasu

型指定はRETURNS、戻り値指定はRETURN

「S」に注意しましょう。

CREATE FUNCTION `fun_get_name`(s int(11))
RETURNS varchar(11)
BEGIN
set @name = '';
select name into @name from people where id = s;
 
RETURN @name;
 
END;
/

※ツールを使って定義していますので、コマンドラインで行う場合は前後にDELIMITERを指定しましょう。

実行方法

テーブルの内容は以下になります。

MariaDB [test2]> select * from people;
+----+---------+-----------------+-----+
| id | name    | mail            | age |
+----+---------+-----------------+-----+
|  1 | kotaro  | kotaro@yamada   |  45 |
|  2 | hanako  | hanako@flower   |  34 |
|  3 | sachiko | sachiko@happy   |  23 |
|  4 | ichiro  | ichiro@baseball |  12 |
|  5 | mamiko  | mami@mumemo     |  45 |
|  6 | jiro    | jiro@change.com |  56 |
+----+---------+-----------------+-----+
6 rows in set (0.00 sec)

 

「select ファンクション名;」で実行できます。

MariaDB [test2]> select fun_get_name(3);
+-----------------+
| fun_get_name(3) |
+-----------------+
| sachiko         |
+-----------------+
1 row in set (0.00 sec)
タイトルとURLをコピーしました