多语言展示
当前在线:963今日阅读:83今日分享:25

Mysql存储过程与函数篇,创建及调用存储函数

存储函数与存储过程作用类同,不同的是存储过程只能使用CALL语句来调用存储过程,只能用输出变量返回值,而存储函数可以从语句外调用(即通过引用函数名),也能返回标量值。创建存储函数的关键字为CREATE FUNCTION,本文给大家讲解一下存储函数的创建及调用
工具/原料
1

电脑

2

MySQL

3

Navicat等可视化数据库管理软件

语法结构
1

创建存储函数的语法结构CREATE FUNCTION func_name([proc_parameter])RETURN type[characteristics..] routine body

2

REATE FUNCTION:创建关键字func_name 存储函数名称proc_parameter:参数列表 格式如下【param_name type 】param_name: 参数名称type:参数类型Return type:表示返回数据的类型characteristic:存储函数特性,与存储过程类似,大家可以查看我的上一篇文章《 Mysql存储过程与函数篇,创建存储过程》

创建及调用存储函数
1

1.创建示例用表,插入测试数据CREATE TABLE `test_10` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(50) DEFAULT NULL,  `age` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;INSERT INTO `test_10` VALUES ('1', 'rat', '2');INSERT INTO `test_10` VALUES ('2', 'ox', '4');INSERT INTO `test_10` VALUES ('3', 'tiger', '6');INSERT INTO `test_10` VALUES ('4', 'rabbit', '8');INSERT INTO `test_10` VALUES ('5', 'dragon', '10');INSERT INTO `test_10` VALUES ('6', 'snake', '12');INSERT INTO `test_10` VALUES ('7', 'horse', '14');INSERT INTO `test_10` VALUES ('8', 'sheep', '16');INSERT INTO `test_10` VALUES ('9', 'monkey', '18');INSERT INTO `test_10` VALUES ('10', 'chicken', '20');INSERT INTO `test_10` VALUES ('11', 'dog', '22');INSERT INTO `test_10` VALUES ('12', 'pig', '24');INSERT INTO `test_10` VALUES ('13', 'cat', '26');

2

2.创建存储函数CREATE FUNCTION get_animal_name (search_id INT(11)) #创建函数RETURNS VARCHAR (50) #定义返回值类型BEGINRETURN ( #返回查询ID对应的名称    SELECT        `name`    FROM        test_10    WHERE        id = search_id);END

3

3.调用存储函数SELECT get_animal_name(1);SELECT get_animal_name(10);

存储函数中参数的使用及流程控制
1

1.存储函数中参数的使用及流程控制  CREATE FUNCTION test_liucheng (the_type INT(11)) #创建函数 RETURNS INT(11) #定义返回值 BEGIN     DECLARE re_age INT(11);#定义变量     IF the_type = 1 THEN #如果类型为1求和         SET re_age = (SELECT SUM(age) FROM test_10);     ELSE #如果类型为2,求平均值(测试用就只求整数了)         SET re_age = (SELECT AVG(age) FROM test_10);     END IF;     RETURN (re_age);#返回参数END

2

2.调用存储函数SELECT test_liucheng(1) as 'age总和';SELECT test_liucheng(2) as 'age均值';

存储函数与存储过程的区别

1.存储函数有且只有一个返回值,而存储过程不能有返回值。2. 函数只能有输入参数,而且不能带in, 而存储过程可以有多个in,out,inout参数。3.存储过程中的语句功能更强大,存储过程可以实现很复杂的业务逻辑,而函数有很多限制,如不能在函数中使用insert,update,delete,create等语句;存储函数只完成查询的工作,可接受输入参数并返回一个结果,也就是函数实现的功能针对性比较强。4.存储过程可以调用存储函数。但函数不能调用存储过程。5.存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用.

注意事项

返回值记得用括号括起来,不然会报错

推荐信息