定义
简单理解,存储过程就是集合了逻辑和流程的sql集,可以实现复杂的逻辑功能
特性
具有输入输出变量,可声明变量,有 if/else,while等控制语句
执行速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
函数的普遍特性:模块化,封装,代码复用;
实例
<strong>一个简单的实例</strong>
create procedure select_name()
begin
select userPhone from users;
end
如下
创建存储过程前,可以先使用 delimiter 把 ; 改成 //
调用如下:
call select_name();
如下图:
<strong>删除存储过程</strong>
DROP PROCEDURE IF EXISTS porcedureName; -- 没有括号()
<strong>使用out参数的存储过程</strong>
create procedure procedureName(
out min decimal(8,2),
out avg decimal(8,2),
out max decimal(8,2)
)
BEGIN
select MIN(price) INTO min from order;
select AVG(price) into avg from order;
select MAX(price) into max from order;
END;
分析:
1、out表示,后面的 min、avg、max变量中,可以用来保存存储过程的结果,以8个整数、2位小数点的格式进行保存。
2、BEGIN 和 END 之间代码,表示存储过程的逻辑和流程, INTO 表示把结果存入 后面的变量中,
以上的代码意思:
把order表中的 price的最小值、平均值、最大值 分别存入 min、avg、max变量中
调用:
call procedureName(@min,@avg,@max)
此调用并没有产生任何输出,只是暂时把值存入到 调用时传入的(@min,@avg,@max)变量中,
输出还需要调用如下
select @min,@avg,@max
<strong>使用IN参数的存储过程</strong>
create procedure getTotalById (
in userId int,
out total decimal(8,2)
)
BEGIN
select SUM(o.totalMoney) from order o
where o.userId= userId
into total;
END;
调用如下:
call getTotalById(1, @total);
select @total;
以上是存储过程比较简单的实例,如果要想了解复杂点的存储过程,敬请等待接下去的文章。