关于MySQL的存储函数(自定义函数)的定义和使用方法详解
存储函数
什么是存储函数:封装一段sql代码,完成一种特定的功能,返回结果。
存储函数的语法:
createfunction函数([函数参数[,….]])Returns返回类型 Begin If( Return(返回的数据) Else Return(返回的数据) endif; end;
例如:createfunctioncount_news(hitsint)returnsint
与存储过程返回参数不同的是存储函数在定义时没用直接声明哪个变量是返回参数,而只是使用了returns声明了返回参数所属的数据类型,返回参数是在函数体中使用return返回要返回的数据变量的形式来表示的。这就需要注意的是:
存储函数只支持输入参数,并且输入参数前没有IN或INOUT.
存储函数中的限制
流控制(Flow-of-control)语句(IF,CASE,WHILE,LOOP,WHILE,REPEAT,LEAVE,ITERATE)也是合法的.
变量声明(DECLARE)以及指派(SET)是合法的.
允许条件声明.
异常处理声明也是允许的.
但是在这里要记住函数有受限条件:不能在函数中访问表.因此在函数中使用以下语句是非法的。
ALTER'CACHEINDEX'CALLCOMMITCREATEDELETE
DROP'FLUSHPRIVILEGES'GRANTINSERTKILL
LOCKOPTIMIZEREPAIRREPLACEREVOKE
ROLLBACKSAVEPOINT'SELECTFROMtable'
'SETsystemvariable''SETTRANSACTION'
SHOW'STARTTRANSACTION'TRUNCATEUPDATE
存储函数与存储过程的区别
一、存储函数有且只有一个返回值,而存储过程不能有返回值。
二、函数只能有输入参数,而且不能带in,而存储过程可以有多个in,out,inout参数。
三、存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,如不能在函数中使用insert,update,delete,create等语句;存储函数只完成查询的工作,可接受输入参数并返回一个结果,也就是函数实现的功能针对性比较强。
四、存储过程可以调用存储函数。但函数不能调用存储过程。
五、存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用。
实例1:
Id |
Name |
|
phone |
1 |
秦云 |
10102800 |
13500000 |
2 |
在路上 |
10378 |
13600000 |
3 |
LEO |
10000 |
13900000 |
Id |
Name |
上机时间 |
管理员 |
1 |
秦云 |
2004-1-1 |
李大伟 |
2 |
秦云 |
2005-1-1 |
马化腾 |
3 |
在路上 |
2005-1-1 |
马化腾 |
4 |
秦云 |
2005-1-1 |
李大伟 |
5 |
在路上 |
2005-1-1 |
李大伟 |
实现目的:
从表1中取所有人员列表,从表2中取上机次数和管理员.
上机人员名单 上机次数 管理员
秦云 3 李大伟,马化腾,李大伟
在路上 2 马化腾,李大伟
LEO 0