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 ;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值