MySQL(4)-自定义函数

来源:互联网 发布:炫踪网络裁人 编辑:程序博客网 时间:2024/05/18 01:54

MySQL自定义函数

自定义函数

用户自定义函数(user-defined function, UDF),是一种对MySQL扩展的途径,其用法与内置函数相同,自定义函数的两个必要条件

  • 参数
  • 返回值

函数可以返回任意类型的值,同样可以接收这些类型的参数(理论上MySQL自定义函数参数不能超过1024个)

创建自定义函数

CREATE FUNCTION [函数名] RETURNS [返回值类型:STRING|INTEGER|REAL|DECIMAL] [函数体];

函数体中:
1. 函数体由合法的SQL语句构成;
2. 函数体可以是简单的SELECT或INSERT语句;
3. 函数体如果为复合结构则使用BEGIN…END语句;
4. 复合结构可以包含声明,循环,控制结构;

创建不带参的函数

SELECT NOW();//显示当前时间,如果我要用中文显示,则需要用到DATE_FORMAT()函数及就是:SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H点%i分%s秒');但是每次这样查询又太麻烦,于是可以创建一个不带参的函数来完成,函数如下:CREATE FUNCTION ft() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(), '%Y年%m月%d日 %H点%i分%s秒'); //输入SELECT ft(),结果为xx年xx月xx日

查看数据库中存在的自定义函数

SHOW FUNCTION STATUS;

创建带参数的函数

CREATE FUNCTION func(mum1 SMALLINT UNSIGNED, num2 SMALLINT UNSIGNED)RETURNS FLOAT(10, 2) UNSIGNEDRETURN (num1 + num2)/2;//带有参数的求两数平均值的函数

创建具有复合结构的函数体

为了实现一个输入名字即插入一条数据的函数功能,我们可以这样:

CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNEDRETURN INSERT test(username) VALUES(username);//这条语句实际上是错误的,因为最后INSERT语句执行完毕后的分号会归纳在SQL语句中而不被当做函数结束的标识

这时候需要修改结束标识,即用DELIMITER//表示结束时必须输入//

eg:SELECT VERSIONG();//上述例子末尾加入//才会输出结果

在此基础上我们才可以执行创建一个带有SQL语句的函数(这样当分号被认为是SQL语句的结束符时,我们可以规定其他符号为函数体结束符,例如上述的//)

CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNEDRETURNINSERT test(username) VALUES(username);LAST_INSERT_ID();//

上述语句也是错误的,因为规定返回值INT类型,而INSERT不能作为返回值返回INT类型,我们继续修改,要用到BEGIN…END语句分块

CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNEDBEGININSERT test(username) VALUES(username);RETURN LAST_INSERT_ID();//

上述语句执行结束后则创建函数成功,然后我们再用DELIMITER ;把结束符改回来即可,而且并不影响之前创建的函数的使用

0 0
原创粉丝点击