mysql进阶篇_创建自定义函数
作者:YXN-sql 阅读量:219 发布日期:2023-11-09
查看创建函数的功能是否开启
show variables like '%func%'
如果Value处值为OFF,则需将其开启
set global log_bin_trust_function_creators=1
创建自定义函数
use name; #选择数据库
注意:
-
参数列表是包含两个部分的:参数名 参数类型。
- 函数体:肯定会有return语句,如果没有就会报错。
- 函数体中仅有一句话的时候,是可以省略begin end 的。
- 使用delimter语句设置结束标记。
- 默认函数必须有参数值的,但我们可以设置它为无参的函数。
基本语法:
DELIMITER $$ -- 修改语句结束符
CREATE
/*[DEFINER = { user | CURRENT_USER }]*/
FUNCTION 函数名([参数列表]) RETURNS 返回的数据类型
BEGIN
DECLARE 变量;
sql语句;
RETURN 返回值;
END$$ -- 语句结束符
DELIMITER ; -- 将语句结束符修改回来
示例:
delimiter $$
create function add_func(param1 int(11),param2 int(11))
returns int
begin
return param1+param2;
end$$
delimiter ;
调用:
select add_func(11,12);
删除函数
自定义函数被创建后,是会一直保存在数据库服务器上的,直至它被删除。
删除自定义的函数方法与删除存储过程的方法基本是一样的。可以使用DROP FUNCTION来实现的。
drop function IF EXISTS 函数名;
- 自定义函数名:指定要删除的自定义函数的名称。
- IF EXISTS:指定关键字,用于防止因误删除不存在的自定义函数而引发错误。(就是如果有的意思,可以不写)
查看函数
-- 查看所有函数
show function status;
-- 查看单个函数
show function status like 'add_func';
-- 查看函数创建语句
show create function add_func;
注意事项
- 自定义函数属于用户级别,只有当前客户端对应的数据库中可以使用
- 可以在不同数据库下看到函数,但是不可以调用
- 自定义函数通常是为了将多行代码集合到一起解决一个重复性的问题
- 函数必须规范返回值,那么在函数内部不能使用select指令,select一旦执行就会的到一个结果集 result set;
可以使用给变量赋值语句
select 字段 into @变量;
函数流程结构案例
需求
从1开始,直到用户传入的对应的值位置,自动求和,凡是5的倍数都不要
设计
- 创建函数
- 需要一个形参,确定要累加到什么位置
- 需要定义一个变量来保存对应的结果
- 内容部需要一个循环来实现迭代累加
- 循环内部需要进行条件判断控制,5的倍数
定义函数
-- 创建一个自动求和的函数
-- 修改语句结束符
delimiter $$
-- 创建函数
create function my_sum(end_value int) returns int
begin
-- 声明局部变量
declare res int default 0;
declare i int default 0;
-- 循环处理
mywhile: while i <= end_value do
-- mysql中没有++
set i = i + 1;
-- 判断当前数据是否合理
if i % 5 = 0 then
iterate mywhile;
end if;
-- 修改变量,累加
set res = res + i;
end while;
-- 返回值
return res;
end
-- 结束
$$
-- 修改语句结束符
delimiter ;
调用函数
-- 实参个数必须等于形参个数
select my_sum(10);
YXN-sql
2023-11-09