存储过程是为了完成特定功能的sql语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行,类似于编程语言中的方法或函数。

存储过程的优点:对sql语句封装,增强可复用性;可以隐藏复杂的业务逻辑、商业逻辑;支持接收参数,并返回结果

存储过程的缺点:可移植性差,如果更换数据库,要重写存储过程;难以调试和拓展;无法使用explain对存储过程进行分析;《阿里粑粑java开发手册》中禁止使用存储过程

存储过程示例:求两数之和

#存储过程定义:求两数之和
#声明语句结束符,在sql语句中,';'是结束符,在定义存储过程时,定义//之间的内容为存储过程,一个存储过程完成
delimiter // 
create procedure my_sum(in a int,in b int,out result int)
begin
	set result = a + b;
end
//
delimiter ; #存储过程定义完成后,再次定义';'为结束符

#存储过程调用
call my_sum(10,20,@result);
select @result;

存储过程示例:计算1+2+…+n的和

#存储过程定义:计算1+2+...+n的和
delimiter //
create procedure my_n_sum(in n int,out result int)
begin
	declare i int default 1;
	declare sum int default 0;

	while i<=n do
		set sum = sum + i;
		set i = i + 1;
	end while;

	set result = sum;
end
//
delimiter ;

#存储过程调用
call my_n_sum(6,@result);
select @result;