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

    一、函数

      在数据库中都有函数,这些函数属于系统函。除此之外用户也可以编写用户自定义函数。用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如max(value)函数,其value被称为参数。函数一般功能比较简单,对于mysql函数只有传入参数,不像存储过程一样,有输入输出参数。

      数据库函数特点如下:

    • 存储函数将向调用者返回一个且仅返回一个结果值。
    • 存储函数嵌入在sql中使用的,可以在select中调用,就像内建函数一样,比如cos()、hex()。
    • 存储函数的参数类型类似于IN参数。

    二、自定义函数

    自定义函数简单语法:

    CREATE FUNCTION 函数名称(
      变量名称 类型,
      变量名称 类型
    )
    RETURN 类型
    BEGIN
      -- 声明, 语句要完成的操作,
    RETURN 变量;
    END;

    三、实例

      例子中的函数使用mysql作为例子。 表结构如下:

    DROP TABLE IF EXISTS `person`;
    CREATE TABLE `person` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(255) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `password` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

       1、不带参数的函数

    DROP FUNCTION IF EXISTS get_count;
     -- 定义函数
    CREATE FUNCTION get_count() 
    RETURNS INT -- 返回值类型
    BEGIN 
         RETURN (SELECT COUNT(*) FROM person);
    END;
    -- 调用
    SELECT get_count() AS 'total';

       表示获取person表的所有记录,没有参数,有数值返回值。

      2、带有参数的函数

    DROP FUNCTION IF EXISTS get_age;
    CREATE FUNCTION get_age(
             id INT(11)  -- 参数(参数可以多个)
    )
    RETURNS INT(11)    -- 返回值类型(只能有一个返回值)
    BEGIN 
        DECLARE age INT; -- 定义变量
        SET age = (SELECT p.age FROM person p where p.id = id);
        IF(ISNULL(age)) THEN -- 查询到的年龄不存在(如id错误,没有记录存在)
            RETURN 0; 
        ELSE
            RETURN age;
        END IF;
    END;
    -- 函数调用
    SELECT get_age(2) as 'age';

      表示通过id获取年龄,有id参数,有数值返回值。

      3、函数其他命令

    SELECT get_age(2);    -- 函数的调用
    SHOW FUNCTION STATUS; -- 查看所有函数
    SHOW CREATE FUNCTION get_age; -- 查看具体函数
    DROP FUNCTION  get_age;  -- 删除查看具体函数

      函数的功能一般都是比较简单的,如求某个值,格式转换等。不像存储过程,一般逻辑都比较复杂。

  • 相关阅读:
    如何查看MySQL的当前存储引擎?
    避免生产环境执行更新删除语句忘记加where条件的解决方案
    物联网发展的现状
    目前行业内比较流行的开源时序数据库产品
    如何查看端口(3306)被那个程序占用
    MySQL数据库开发的36条军规
    介绍 MySQL 8 中值得关注的新特性和改进。
    IE浏览器 兼容性(IE9-11 差异说明)
    python3:(unicode error) 'utf-8' codec can't decode
    静态代码块
  • 原文地址:https://www.cnblogs.com/always-online/p/3912904.html
Copyright © 2011-2022 走看看