関数は特殊なストアドプログラムと考えることができ、関数には戻り値を持たせることができ、すべてのパラメータはINタイプです。
関数の構造
関数の構造は以下のとおりであり、ストアドプロシージャと比較して、少なくとも1つ以上のRETURNS句を含みます:
FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...]
BEGIN -- 実行開始
SQL statement; [ SQL statement; ...]
END; -- 実行終了
func_parameter:
param_name type
type:
任意の有効なMySQLデータ型
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
関数の作成
関数はCREATE FUNCTIONステートメントを使用して作成され、以下の条件を満たす必要があります:
関数は戻り値の設定を考慮する必要があります。
すべての関数には少なくとも1つの
RETURNSステートメントが必要です。関数は式として呼び出されるため、他のステートメントと組み合わせて使用する必要があります。
例:
obclient> CREATE FUNCTION my_func (c1 CHAR(20)) RETURNS CHAR(50) DETERMINISTIC
RETURN CONCAT('Thank ',c1,'!');
Query OK, 0 rows affected
obclient> SELECT my_func('You');
+----------------+
| my_func('You') |
+----------------+
| Thank You! |
+----------------+
1 row in set