MySQL 创建函数入门

参考资料:

MySQL之自定义函数 - 知乎 (zhihu.com)

MySQL 数据类型 | 菜鸟教程 (runoob.com)

基本语法

-- 修改结尾分割符为“$$”。
-- 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 ;

注意

  • 如果参数或返回的值是不确定小数位数的数值,类型推荐使用:FLOATDOUBLE,尽量不使用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 ;

你可能感兴趣的:(MySQL 创建函数入门)