含义:存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用
优点
- 存储过程可封装,并隐藏复杂的商业逻辑。
- 存储过程可以回传值,并可以接受参数。
- 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
-
缺点
存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
- 存储过程的性能调校与撰写,受限于各种数据库系统。
简单存储过程
创建一个存储过程
create procedure GetUsers()
begin
select * from user;
end;
调用存储过程
call GetUsers();
删除存储过程
drop procedure if exists GetUsers;
带参数的存储过程
MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;
例:
create procedure GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;
调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以 @ 开始)call GetScores(@minScore, @avgScore, @maxScore);
该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量 @minScore, @avgScore, @maxScore , 然后即可调用显示该变量的值:select @minScore, @avgScore, @maxScore;
查看存储过程
show create PROCEDURE 存储过程名l;
删除存储过程
drop PROCEDURE 存储过程名
