MySQL存储函数

一 存储函数的概述

  在MySQL中,存在一种与存储过程十分相似的过程式数据库对象——存储函数。它与存储过程一样,都是由SQL语句和过程式语句组成的代码片段,并且可以被应用程序和其他SQL语句调用。

二、存储函数和存储过程的区别

(1)存储函数不能拥有输出参数。存储过程拥有输出参数。

(2)可以直接对存储函数调用(select),不需要使用CALL语句,存储过程调用需要。

(3)存储函数中必须包含RETURN语句,此语句不允许出现在存储过程中。

(4)存储过程和存储函数都是存储在服务器端的SQL语句的集合,要使用这些已经定义好的存储过程和存储函数就必须要通过调用的方式来实现,存储过程是通过CALL语句来调用的。而存储函数的使用方法与MySQL内部函数的使用方法是一样的,区别在于,存储函数是用户自己定义的,而内部函数是MySQL的开发者定义的

三、创建存储函数语法

Delimiter $$

Create function 存储函数名称(参数名 数据类型,...)

Returns 数据类型

Begin

存储函数体

End

$$

注意:(1)Returns 数据类型---用于声明存储函数返回值的数据类型

(2)存储函数体

    • 局部变量
    • Set 语句
    • Select...into语句
    • 流程控制语句
    • 游标
    • return value---存储函数的返回值

说明:在return value语句中包含select语句时,select语句的返回结果只能是一行且只能是一列值(即单值);

例如:创建存储函数语法

Delimiter $$

Create function 存储函数名称(参数名 数据类型,...)

Returns 数据类型

Begin

If 条件 then

Return (返回的值);

Elseif 条件 then

Return (返回的值);

...

Else Return (返回的值);

End if;

End

$$

例1:在数据库db_school中,创建一个存储函数,要求该函数根据给定的学号返回学生的姓名;

Delimiter $$

Create function f_name(sno int)

Returns char(20)

Begin

Return (select studentname from tb_student where studentno=sno);

End$$

Select f_name(2013110101)$$

Delimiter $$

Create function f_name1(sno int)

Returns char(20)

Begin

Declare sname char(20);

Select studentname into sname from tb_student where studentno=sno;

Return sname;

End$$

Select f_name1(2013110101)$$

例2:在数据库db_school中,创建一个存储函数,要求该函数根据给定的学号返回学生的性别,如果数据库中没有给定的学号,则返回“没有该学生”;

Create function f_sex(sno int)

Returns char(20)

Begin

Declare ssex char(20);

Select sex into ssex from tb_student where studentno=sno;

If ssex is null then return (select '没有该学生');

Elseif ssex='男' then return (select '男');

Else return (select '女');

End if;

End$$

Select f_sex(2013110101)$$

四、调用存储函数

Select 存储函数名称(参数列表值);

例:Select f_sex(2013110101)$$

五、查看存储函数

(1)查看符合条件的存储函数或存储过程:

Show {function|procedure} status [like 'pattern']  \G

例:Show function status like 'f_%' \G

注意:like 'pattern'参数用来匹配存储过程或存储函数的名称

(2)查看某一个存储函数的详细结构

Show create function [数据库名.]存储函数名称 \G

例:Show create function f_sex \G

六、删除存储函数

Drop function 存储函数名称;

注意:同一数据库下,不能同时删除多个存储函数。

例:drop function f_name1;

  • 8
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值