DELIMITER //
-- 自定义函数
-- 函数要素:函数名,参数列表(形参和实参),返回值,函数体(作用域)
-- 创建函数
-- 创建语法
CREATE FUNCTION functionName([形参列表]) RETURNS 数据类型 -- 规定要返回的数据类型
BEGIN
-- 函数体
-- 返回值:return 类型(指定数据类型);
END
CREATE FUNCTION f1() RETURNS INT
RETURN 100;
-- 自定义函数与系统函数调用方式是一样:select 函数名([实参列表]);
-- 调用函数
SELECT fi();
-- 查看所有函数
SHOW FUNCTION STATUS\G
-- 查看函数创建语句
SHOW CREATE FUNCTION f1\G
-- 删除函数
DROP FUNCTION f1;
-- 函数参数
-- 参数分两种:定义时的参数叫形参,调用时的参数叫实参(实参可以是数值也可以是变量,实参要求必须指定数据类型)
FUNCTION 函数名(形参名字 字段类型) RETURNS 数据类型
-- 做函数:计算1-n之间的和
CREATE FUNCTION f2(int_1 INT) RETURNS INT
BEGIN
-- 定义条件变量
SET @i = 1; -- @符号定义的变量是全局变量,没有的可以理解为局部变量
SET @res = 0; -- 保存结果
-- 循环求和
WHILE @i <= int_1 DO
-- 求和:任何变量要修改,必须使用set关键字
-- mysql中没有+=,没有++
SET @res = @res + @i;
-- 修改循环变量
SET @i = @i + 1;
END WHILE;
-- 返回值
RETURN @res;
END
//
-- 作用域
-- mysql中的作用域与js中的作用域完全一样
-- 全局变量可以在任何地方使用;局部变量只能在函数内部使用
-- 全局变量:使用set关键自定义,使用@符号标志
-- 局部变量:使用declare关键字声明,没有@符号;所有的局部变量的声明,必须在函数体开始之前
-- 求和:1-n之间的和,要求5的倍数不加
CREATE FUNCTION f3(int_1 INT) RETURNS INT
BEGIN
-- 声明变量:循环变量,结果变量
DECLARE i INT DEFAULT 1;
DECLARE res INT DEFAULT 0; -- 定义局部变量可以有属性
-- 循环判断
mywhile:WHILE i <= int_1 DO
-- 相加:判断
IF i % 5 = 0 THEN
-- 修改循环条件
SET i = i + 1;
-- 不符合条件:循环重新来过
ITERATE mywhile;
END IF;
-- 相加
SET res = res + i;
-- 改变循环变量
SET i = i + 1;
END WHILE;
-- 返回结果
RETURN res;
END//
本文链接:https://blog.youkuaiyun.com/oneeyear/article/details/82995759