电脑
MySQL
Navicat等可视化数据库管理软件
创建存储函数的语法结构CREATE FUNCTION func_name([proc_parameter])RETURN type[characteristics..] routine body
REATE FUNCTION:创建关键字func_name 存储函数名称proc_parameter:参数列表 格式如下【param_name type 】param_name: 参数名称type:参数类型Return type:表示返回数据的类型characteristic:存储函数特性,与存储过程类似,大家可以查看我的上一篇文章《 Mysql存储过程与函数篇,创建存储过程》
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.创建存储函数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.调用存储函数SELECT get_animal_name(1);SELECT get_animal_name(10);
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.调用存储函数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调用)。而函数可以作为查询语句的一个部分来调用.
返回值记得用括号括起来,不然会报错