数据库-自定义函数

1、分隔符的修改

分隔符(定界符)-DELIMITER

  • 告诉MySQL解释器语句结束
  • DELIMITER可以设置MySQL的结束符
  • MySQL默认的语句结束符是;,

为了避免与自定义函数或者存储过程总SQL结束符冲突,使用DELIMITER改变MySQL的结束符,如修改为//    DELIMITER//

定义完毕,需要将结束符恢复  DELIMITER;


2、永远的Hello-World

函数

  • 内置函数

极大的方便了开发和数据操作,如聚合函数等

  • 自定义函数

解决个性化需求

自定义函数

  • UDF(User-Defind Function)
  • 自定义函数是对MySQL功能的扩展

创建自定义函数

  • CREATE [AGGERGATE]  FUNCTION

function_name(parameter_name type,[parameter_name type,...])

        RETURNS (STRING | INTRGER |REAL)

       runtime_body

即:CREATE FUNCTION 函数名称(参数列表)

RETURENS   返回值类型

 

函数体

  • 函数体由多条可用的mysql语句,流程控制,变量声明等语句构成
  • 多条语句应该使用begin  end语句块包含

1)CREATE FUNCTION f_say_hello()
RETURNS VARCHAR(20)
BEGIN
      RETURN 'Hello World!';
END; 

 

删除自定义函数

DROP  FUNCTION  function_name;

2)delimiter //
DROP FUNCTION IF EXISTS f_say_hello;
CREATE FUNCTION f_say_hello()
RETURNS VARCHAR(20)
BEGIN
   RETURN 'Hello World!';
END//
delimiter ;
 

 

调用自定义函数

SELECT  function_name(parameter_value)

SELECT f_say_hello();


3、带参数的自定义函数

1)一个参数

delimiter //
DROP FUNCTION IF EXISTS f_say_a_word;
CREATE FUNCTION f_say_a_word(word VARCHAR(20))
RETURNS VARCHAR(20)
BEGIN
   RETURN 'Hello World!';
END//
delimiter ;

SELECT f_say_a_word('Hello World!!!');

 

2)两个参数

delimiter //
DROP FUNCTION IF EXISTS f_add_num;
CREATE FUNCTION f_add_num(a INT,b INT)
RETURNS INT
BEGIN
   RETURN a+b;
END//
delimiter ;


SELECT f_add_num(5,4);


4、变量

变量

  • 变量是用来存储数据的
  • 记忆功能

 

变量的定义

DECLARE var_name[,var_name]...data_type [DEFAULT VALUE];

  • 即DECLARE  变量1(,变量2,...) 变量类型 [DEFAULT  默认值]
  • var_name 是局部变量的名称,data_type是变量的数据类型
  • DEFALT VALUE字句可以为变量提供默认值

 

变量的作用范围

  • 变量需要定义在BEGIN...END间的第一行
  • 可以理解成全部变量

 

变量的赋值

  • 为变量赋值可以改变变量的值,使用SET为变量赋值

SET  parameter_name = value[,parameter_name = value...]

SELECT  value  INTO  parameter_name

 

自定义函数实战

DECLARE _investTimes INT DEFAULT 0;

-- 为变量赋值
-- SET _sumAmount = 100.00; 

--   求出该用户的投资总额
SELECT SUM(Amount) INTO _sumAmount
FROM invest
WHERE MemberID = userId;

-- 求出该用户的投资次数
SELECT COUNT(Amount) INTO _investTimes
FROM invest
WHERE MemberID = userId;
RETURN _sumAmount / _investTimes;
END//
delimiter ;

 

SELECT f_get_avg_amount(1003);

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值