MYSQL——自定义函数

来源:互联网 发布:nginx tomcat 配置ssl 编辑:程序博客网 时间:2024/05/01 07:10
  • 自定义函数

    用户自定义函数(user-defined function,UDF)是一种对MySQL扩展的途径,其用法与内置函数相同。
    函数可以返回任意类型的值,同样可以接收任意类型的值。接收和返回两者没有必然关系。

  • 2个必要条件
    1.参数 :可以有0个或多个
    2.返回值:只能有一个返回值

  • 创建自定义函数
    CREATE FUNCTION 函数名(参数名1 类型1,参数名2 类型2,…)
    RETURNS 返回类型
    {STRING|INTEGER|REAL|DECIMAL}
    RETURN 函数体
    注意:函数必须有返回值,如果无返回值的,应该创建‘存储过程’(函数返回值只能有一个,存储过程可以没有或多个(通过SELECT),而且存储过程可以通过out为变量赋值,而函数不行)
    另外,函数的参数最好不要和表的字段名字相同,一定要区分开。

  • 关于函数体
    1.函数体由合法的SQL语句构成
    2.函数体可以是简单的SELECT或INSERT语句(允许用SELECT…INTO 变量来把值写入,但不允许SELECT…来返回结果集,因为函数只允许有一个返回值(切记,SELECT会返回结果集,并不是只有RETURN才可以返回))
    3.函数体如果为复合结构则使用BEGIN…END语句
    4.复合结构可以包含声明、循环、控制结构

  • 删除函数
    直接使用DROP FUNCTION 函数名。
  • 创建不带参数的自定义函数
    返回当前时间为年月日时分秒
    CREATE FUNCTION f1()
    RETURNS VARCHAR(50)
    RETURN DATE_FORMAT(NOW(),’%Y年%m月%d日 %H时%i分%s秒’);

调用:SELECT f1();

  • 创建带有参数的自定义函数
    计算(num1+num2)*2
    CREATE FUNCTION f2(num1 INT UNSIGNED,num2 INT UNSIGNED)
    RETURNS FLOAT(10,2) UNSIGNED
    RETURN (num1+num2)*2;

调用:SELECT f2(2,2); 结果:8

  • 创建具有符合结构函数体的自定义函数

表user
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
username VARCHAR(20) NOT NULL

向表user中添加username返回id
(因为用‘;’会认为是sql的结束语句,所以我们可以自定义一下结束符号,
比如:DELIMITER //)
CREATE FUCTION adduser(name VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(username) VALUES(name);
RETURN LAST_INSERT_ID();
END
//

调用:SELECT adduser(‘jan’);

原创粉丝点击