Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL ストアドファンクションを使ってみましょう!

MySQLって、ストアドプロシージャとストアドファンクションの2つが利用できます。ストアドプロシージャは、CALL XXX って呼ぶもの、一方でストアドファンクションはSQLの中で呼べたりできるものです。 ストアドファンクションは戻り値が1つしか返せないとか色々と制約はあるので、やれることは限定されてきますが、SQLの一環で例えば、SUMとかCOUNTとかと同様の手順で、加えることができるので、可読性の良いSQLを書くことができます。

ちょっと例で説明しますが、日付をパラメータにして、消費税率を返すストアドファンクションを作成してみましたのでご一読を・・

f:id:hit10231023:20180309104332j:plain

概要

いまさらだけど、消費税率を求めるストアドファンクション、別にデータベースを見に行っているわけではないので 速いっす

ストアドファンクション

DELIMITER $$

DROP FUNCTION IF EXISTS taxrate ;

CREATE FUNCTION taxrate (_wdate date) RETURNS decimal(2,2)
NOT DETERMINISTIC
BEGIN

   IF _wdate >= '2014-04-01' THEN
     RETURN 0.08 ;
   ELSE
     RETURN 0.05 ;
   END IF ;
END $$

DELIMITER ;

利用例

mysql> select taxrate(current_date) ;
+-----------------------+
| taxrate(current_date) |
+-----------------------+
|                  0.05 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select taxrate('2014-04-01') ;
+-----------------------+
| taxrate('2014-04-01') |
+-----------------------+
|                  0.08 |
+-----------------------+
1 row in set (0.00 sec)