zoukankan      html  css  js  c++  java
  • MySQL自定义函数

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

      自定义函数两个必要条件:

            参数:可以有另个或多个

            返回值:只能有一个

    创建自定义函数:

       CERATE FUNCTION function_name([指定参数类型], ...... )

       RETURNS {STRING|INTEGER|REAL|DECIMAL}

       RETURN  [characteristic ...] routine_body    

    注释:RETURNS后接返回值的类型

       routine_body指的是函数体:

                (1)函数体有合法的SQL语句构成

                (2)函数体可以是简单的SELECT或INSERT语句

                (3)函数体如果为复合结构则使用BEGIN...END语句

                (4)复合结构可以包含声明,循环,控制结构,......

       characteristic是指自定义函数的特性,形式为:COMMENT  'string' | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA | SQL SECURITY {DEFINER | INVOKER}

          COMMETN:注释

          CONTAINS SQL:包含SQL语句,但不包含读或写数据的语句

          NO SQL:不包含SQL语句

          READS SQL DARA:包含读数据的语句

          MODIFIES SQL DATA:包含

    调用函数:SELECT  function_name([参数])

    删除自定义函数:DROP  FUNCTION  function_name例子:

      1、创建一个无参函数,实现格式化当前日期的功能

      ->CREATE  FUNCTION  f1()  RETURNS  varchar(30)  RETURN  DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s秒')

      2、创建一个带参的函数,实现计算平均值的功能

      ->CREATE  FUNCTION  f2(num1 SMALLINT  UNSIGNED,num2 SMALLINT  UNSIGNED)  RETURNS  FLOAT(10,2)  UNSIGNED  RETURN  (num1+num2)/2;

      3、创建一个复合函数,用BEGIN...END

      mysql>DELIMITER  //

      mysql>CREATE  FUNCTION  adduser(username VARCHAR(20))

          ->RETURNS INT UNSIGNED

          ->BEGIN

          ->INSERT test(username)  VALUE(username);

          ->RETURN  LAST_INSERT_ID();

          ->END

          ->//

      mysql>DELIMITER  ;

    tips:

      在 程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在 程序体中的;定界符被传递到服务器而不是被mysql自己来解释

  • 相关阅读:
    ggplot2 上篇
    R笔记1
    读书笔记 第2章 数据挖掘概述
    读书笔记 数据化营销
    [LeetCode] 172. 阶乘后的零
    [LeetCode] 171. Excel表列序号
    [LeetCode] 169. 求众数
    知乎使用selenium反爬虫的解决方案
    [LeetCode] 168. Excel表列名称
    [LeetCode] 167. 两数之和 II
  • 原文地址:https://www.cnblogs.com/yaohunzhanyue/p/5712074.html
Copyright © 2011-2022 走看看