存储函数(一)—— 创建存储函数

 
之前,我们列举不少mysql自带的函数,但是有些时候自带函数并不能很好满足我们的需求,此时就需要自定义存储函数了,存储函数与存储过程有些类似,简单来说就是封装一段sql代码,完成一种特定的功能,并返回结果。其语法如下:
 
CREATE FUNCTION 函数([参数类型 数据类型[,….]]) RETURNS 返回类型
  BEGIN
     SQL语句.....
    RETURN (返回的数据)
  END
 
 
与存储过程不同的是,存储函数中不能指定输出参数( OUT)和输入输出参数( INOUT)类型。存储函数只能指定输入类型而且不能带IN。同时存储函数可以通过RETURN命令将处理的结果返回给调用方。注意必须在参数列表后的RETURNS( 该值的RETURNS多个S,务必留意)命令中预先指定返回值的类型。如下创建一个计算斐波那契数列的函数
 
 
这里命名存储函数时使用了【 fn_ 】作为开头,这样可以更容易区分与【 sp_ 】开头的存储过程,从上述语句可以看出前面在存储过程分析的流程语句也是可以用于存储函数的,同样的, DECLARE声明变量和SET设置变量也可用于存储函数 ,当然包括定义异常处理语句也是适应的,请注意执行存储函数使用的是 select 关键字,可同时执行多个存储函数,嗯,存储函数就这样定义,是不是跟存储过程很相似呢?但还是有区别的,这点留到后面分析。ok~,为了进一步熟悉存储函数,下面编写一个用于向user插入用户的存储函数:
 
 
 
 
 
 
create function fn_get_bom_child(pid VARCHAR(10))
returns varchar(4000)
BEGIN
DECLARE temp VARCHAR(10000);
DECLARE tempChild VARCHAR(4000);
SET temp = '';
SET tempChild = pid;
WHILE tempChild IS NOT NULL
DO
SET temp = CONCAT(temp,',',tempChild);
SELECT GROUP_CONCAT(comp_material_id) into tempChild from t_bom_info where FIND_IN_SET(parent_material_id,tempChild);
END WHILE;
RETURN temp;
END
 
 
select * from t_bom_info where FIND_IN_SET(parent_material_id,fn_get_bom_child('K00123'))
 
posted @   程序员ken  阅读(19)  评论(0编辑  收藏  举报  
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示