首页 > 代码库 > 数据库自定义函数

数据库自定义函数

一、函数

  在数据库中都有函数,这些函数属于系统函。除此之外用户也可以编写用户自定义函数。用户定义函数是存储在数据库中的代码块,可以把值返回到调用程序。调用时如同系统函数一样,如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;  -- 删除查看具体函数

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