関数とは特殊なサブルーチンの一種であり、戻り値を持つことができ、すべてのパラメータはIN型です。
関数の構造
関数の構造は以下の通りで、ストアドプロシージャと比較して少なくとも1つ以上のRETURNS句が追加されます:
CREATE
[DEFINER = user]
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body
func_parameter:
param_name type
type:
Any valid MySQL data type
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
routine_body:
Valid SQL routine statement
関数の利点
関数の利点はサブルーチンと基本的に同じですが、関数には戻り値があるため、関数を式として使用することができます。機能を関数として定義し、式の中で使用するこのような使い方は、より柔軟で豊かであり、プログラミング習慣にも合致しています。
関数の作成
関数もCREATEステートメントを使用して作成する必要があり、以下の条件を満たす必要があります:
関数では戻り値の設定を考慮する必要があります。
すべての関数には少なくとも1つの
RETURNSステートメントが必要です。obclient> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN CONCAT('Hello, ',s,'!');/ Query OK, 0 rows affected obclient> SELECT hello('world');/ +----------------+ | hello('world') | +----------------+ | Hello, world! | +----------------+ 1 row in set関数は式として呼び出されるため、他のステートメントと組み合わせて使用する必要があります。