1. 背景

   * 自定义函数与存储过程非常类似,但必须带有返回值。


2. 自定义函数例子 [ 阶乘 ]

   * 创建自定义函数 func_factorial

   delimiter 设置语句结束符

mysql> delimiter //
mysql> CREATE FUNCTION func_factorial (total INT)
    -> RETURNS INT
    -> BEGIN
    ->     DECLARE i INT;
    ->     DECLARE res INT;
    ->     SET i = 1;
    ->     SET res = 1;
    ->     IF total <= 0 THEN
    ->         SET total = 1;
    ->     END IF;
    ->     WHILE i <= total DO
    ->         SET res = res * i;
    ->         SET i = i + 1;
    ->     END WHILE;
    ->     RETURN res;
    -> END; //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;


   * 调用自定义函数 func_factorial

mysql> SELECT func_factorial(10);
+--------------------+
| func_factorial(10) |
+--------------------+
|            3628800 |
+--------------------+
1 row in set (0.01 sec)


3. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。