参考资料:
基本语法
-- 修改结尾分割符为“$$”。
-- MySQL默认是根据“;”作为分隔符的,当检查到有“;”就认为语句结束了。故需要改变
DELIMITER $$
-- 第一条SQL: 创建前先尝试删除历史的方法
DROP FUNCTION IF EXISTS 方法名$$
-- 第二条SQL: 创建方法
CREATE FUNCTION 方法名(参数 参数类型)
RETURNS 返回值类型
COMMENT '这是注释内容,主要用来说明该方法是用来干什么的'
BEGIN
-- 使用“DECLARE”关键字定义变量,类型JavaScript中的var
DECLARE 变量名 变量类型[(变量长度)] DEFAULT 默认值;
-- 或
DECLARE 变量名 变量类型[(变量长度)];
-- 这里写方法体
...
-- 变量赋值:
SET 变量名 := 变量值;
-- 或
-- 相当于: 变量A = A, 变量B = B
SELECT A, B INIO 变量A, 变量B FROM 表;
-- 判断
IF 变量 = 变量值1 THEN
...
-- 注意MySQL是ELSEIF,而不是ELSIF
ELSEIF 变量 = 变量值1 THEN
...
ELSE
...
END;
-- 嵌套判断
-- 第一层判断:
IF 变量 = 变量值1 THEN
-- 第二层判断:
IF 变量 = 变量值1 THEN
...
END;
ELSEIF 变量 = 变量值1 THEN
...
ELSE
...
END;
RETURN 变量;
END $$
-- 记得将分隔符改为默认的“;”
DELIMITER ;
注意
-
如果参数或返回的值是不确定小数位数的数值,类型推荐使用:
FLOAT
和DOUBLE
,尽量不使用DECIMAL
。原因:
DECIMAL
默认会被解析成DECIMAL(10, 0)
,如果传一个小数进入,会被处理成整数。比如:传入5.5,则处理成6。
-
MySQL函数默认不支持可变参数和重载。
示例
DELIMITER $$
DROP FUNCTION IF EXISTS GETWD$$
CREATE FUNCTION GETWD(ANGLE FLOAT)
RETURNS VARCHAR(20)
COMMENT '根据角度获取方位'
BEGIN
DECLARE V_RESULT VARCHAR(20);
IF ANGLE IS NULL THEN
RETURN NULL;
END IF;
IF (315 >= ANGLE AND ANGLE < 45) THEN
SET V_RESULT := 'N';
ELSEIF (45 <= ANGLE AND ANGLE < 135) THEN
SET V_RESULT := 'E';
ELSEIF (135 <= ANGLE AND ANGLE < 225) THEN
SET V_RESULT := 'S';
ELSEIF (225 <= ANGLE AND ANGLE < 315) THEN
SET V_RESULT := 'W';
ELSE
SET V_RESULT := 'N';
END IF;
RETURN V_RESULT;
END $$
DELIMITER ;
网友评论