MySql学习笔记——存储函数

在学习完存储过程后,今天主要回顾一下mysql中的存储函数的知识。

函数与存储过程的区别

首先,存储函数也是过程式对象之一,与存储过程相似。它们都是由SQL和过程式语句组成的代码片断,并且可以从应用程序和SQL中调用。
区别:
1.存储函数不能拥有输出参数,因为存储函数本身就是输出参数;
2.不能用CALL语句来调用存储函数;
3.存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中。

存储函数的创建

创建存储函数使用CREATE FUNCTION语句。查看数据库中的存储函数,可以使用SHOW FUNCTION STATUS命令。
创建存储函数的语法为:

 CREATE FUNCTION sp_name ([func_parameter[,....]])
   RETURN type
   [characteristic...] routine_body

说明:存储函数的定义格式和存储过程相关不大。

  • sp_name是存储函数的名称。存储函数不能拥有与存储过程相同的名字。
  • func_parameter是存储函数的参数,参数只有名称和类型,不能指定IN,OUT和INOUT。RETURN type子句声明函数返回值的数据类型。
  • routine_body是存储函数的主体,也叫存储函数数体。

例子:

delimiter $$
create function ss(ac char(6))
returns char(8)
begin 
 return (select username from user where id=ac);
end $$
delimiter ;

说明:RETURN子句中包含SELECT语句时,SELECT语句的返回结果只能是一行且只能有一列值。

存储函数的调用、删除和修改

调用

调用函数用select 关键字。
语法格式:

SELECT sp_name ([func_parameter[,...]])

例子:

select ss('11');

结果:

删除

语法格式:

DROP FUNCTION [IF EXISTS] sp_name

例子:

drop function if exists ss;

修改

语法格式:

ALTER FUNCTION sp_name [characteristic ...]

说明:函数其实不能修改,只能先删除再重新定义。

总结

函数与存储过程很相似,理解起来就很容易了。

原文地址:https://www.cnblogs.com/black-spike/p/7617188.html