一.存储过程的概述
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
二。存储过程的优点
①存储过程的能力大大增强了SQL语言的功能和灵活性。
存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
②可保证数据的安全性和完整性。
③运行速度快
存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
④简化SQL语言
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
⑤存储过程主要是在服务器上运行,减少对客户机的压力。 可以降低网络的通信量。
三.语法结构
四.案例实战
# 1.创建存储过程 p_student,从student表中检索出所有电话以135开头的学生的学号、姓名、出生日期和电话等信息。
-- 删除存储过程 p_student
drop
procedure if exists p_student;
-- 创建存储过程 p_student
create
procedure p_student()
begin
select
S_no 学号,
S_name 姓名,
S_bir 出生日期,
phone 电话
from
student
where
phone like '135%';
end;
-- 调用存储过程 p_student
call p_student;
# 2.创建存储过程pro_select(),用指定的学号和课程号为参数查询学生成绩,输出参数为学生平时成绩和结业成绩。
-- 查看score表结构
desc
score;
-- 删除存储过程pro_select()
drop
procedure if exists pro_select;
-- 创建存储过程pro_select()
create
procedure pro_select(
in sno bigint,
in cno char(13),
out d_sc float,
out f_sc float
)
begin
select
daily , final into d_sc , f_sc
from
score
where
S_no = sno
and C_no = cno;
select
@d_sc 平时成绩,
@f_sc 结业成绩;
end;
-- 调用存储过程pro_select()
call pro_select(18122221320, 'a01564', @d_sc, @f_sc);
# 3.创建一个存储过程 pro_insert(),向 score表中插入一行记录,然后创建另一存储过程pro_out(),调用存储过程pro_insert(),并查询输出score表中插入的记录。
-- 删除存储过程 pro_insert()
drop
procedure if exists pro_insert;
-- 创建存储过程 pro_insert()
create
procedure pro_insert(
in sno bigint,
in cno char(13),
in dscore float,
in fscore float
)
begin
insert into
score
values
(sno, cno, dscore, fscore);
end;
-- 删除存储过程pro_out()
drop
procedure if exists pro_out;
-- 创建存储过程pro_out()
create
procedure pro_out(
in sno bigint,
in cno char(13),
in dscore float,
in fscore float
)
begin
call pro_insert(sno, cno, dscore, fscore);
select
*
from
score
where
S_no = sno
and C_no = cno;
end;
-- 调用存储过程pro_out()
call pro_out(18122221329, 'C05103', 89, 97);
# 4.查看p_student存储过程的定义。
show
create
procedure p_student;