SQL 自定义函数
UDF - 用户自定义函数
-
关键词:create function
-
函数体(参数列表)返回类型
-
修饰符
-- deterministic : 指示函数具有确定性,输入相同输出相同,有利于优化查询和缓存 -- no sql :函数不会访问或修改数据库中的数据,提高执行效率和安全性 -- reads sql data : 函数可能会读取但不会修改数据库中的数据
-
函数执行体 :begin …… end
-
创建函数
-- 重新定义代码的终止符为$$ delimiter $$ -- 自定义函数 -- param_name 形参名 -- data_type 形参类型 create function func_name(param_name data_type,...) -- 声明自定义函数返回值的数据类型 return data_type deterministic -- 函数主体 begin declare ...; ... ... ...; return ...; end $$ -- 还原之前的代码终止符 ; delimiter ;
注意:delimiter是将sql中的代码终止符分号 “ ; ” 改为其他终止符,函数中的分号 “ ; ” 表示一个语句的结束并不是整段代码的结束,而sql中的分号表示整段代码的结束,如果不更改终止符 “ ; ” ,则函数中会默认整段提前代码结束,函数报错!!!
-
删除函数
drop function if exists func_name;
-
调用函数
select func_name(param1,patam2);
-
例:自定义字符串内容超过50字符,截断后面的内容并补充一个省略号……
-- 更改终止符,避免函数提前结束 delimiter$$ -- 自定义一个函数名为truncate_tring的函数 -- 第一个参数类型是varchar最大为16383 -- 第二个参数类型为int 且为负数(unsigned:非负数) create function truncate_tring( original_string varchar(16383), max_length int unsigned )return varchar(16383) deterministic -- 函数主体 -- 定义一个变量result默认为传入original_string -- 使用if判断original_string的字符长度,char_length()提取字符长度,如果大于给定的长度max_length,使concat(left(original_string,max_length),'……')赋值给result,concat实现一个字符串的拼接,将……拼接上,end if 结束if判断 begin declare result varchar(16383) default original_string; if char_length(original_string) > max_length then set result = concat(left(original_string, max_length),'……'); end if; return result; end$$ -- 还原终止符 delimiter ;
-- 调用struncate_string函数 select truncate_string('和我在成都的街头走一走呕呕呕', 10);
-- 调用struncate_string函数
select truncate_string('和我在成都的街头走一走呕呕呕', 10);