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