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

 
之前,我们列举不少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'))
 
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
存储函数和自定义函数是两种不同的概念。引用\[1\]中提到,存储函数是在数据库中创建的一种函数,它必须有一个return子句用于返回函数值,并且可以通过CREATE FUNCTION语句来创建。而自定义函数是指用户自己定义的函数,可以在程序中使用,但不是在数据库中创建的。引用\[2\]中提到,在MySQL中,存储过程和函数可以使用CREATE PROCEDURE和CREATE FUNCTION语句来创建,而自定义函数则可以直接在程序中定义。存储过程和函数可以通过CALL语句来调用,而自定义函数可以通过函数名来引用。此外,存储过程和函数可以有输出参数,可以返回多个值,而自定义函数通常只能返回一个标量值。根据引用\[3\]中的原则,如果只有一个返回值,通常使用存储函数;如果有多个返回值,通常使用存储过程。 #### 引用[.reference_title] - *1* *3* [Oracle数据库——存储过程和自定义函数](https://blog.csdn.net/hyh17808770899/article/details/106867758)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [八、存储过程与自定义函数](https://blog.csdn.net/qq_52059326/article/details/124399461)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员ken

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值