存储过程是为了完成特定功能的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;