共计 1107 个字符,预计需要花费 3 分钟才能阅读完成。
之前,咱们列举不少 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’))
本文来源于:宋文超 super,专属平台有 csdn、思否(SegmentFault)、简书、开源中国(oschina),转载请注明出处。