目录
一、什么是存储过程?
存储过程本质上就是执行一组SQL语句来完成某些任务。
二、存储过程有什么用?
1)提高性能。
2)提高代码复用性。
3)简化复杂操作。
4)便于维护和管理。
5)减少数据库压力。
三、存储过程的一些操作
3.1创建存储过程
sql
create procedure pro_name(
in 输入参数1,2,3..,
out 输出参数1,2,3...,
inout 输入输出参数1,2,3...)
begin
SQL代码块
end
3.2调用存储过程
sql
call pro_name(参数);
3.3删除存储过程
sql
drop procedure pro_name;
3.4存储过程的一些语法
3.4.1传入传出参数
in是存储过程的输入参数,out数存储过程的输出参数,inout既可作为输入参数,又可作为输出参数。
3.4.2定义变量
sql
declare 变量名 类型 default 默认值;
declare sum int default 0;
default 不需要可以去掉。
3.4.3赋值变量
sql
-- 1)
set sum=0;
-- 2)
select 0 into sum;
3.4.4条件判断
sql
if 判断条件1
then
elseif 判断条件2
then
elseif 判断条件3
then
else
end if;
3.4.5循环语句
sql
-- 1)while
while 判断条件
do
循环语句
end while;
-- 2)repeat
repeat
循环语句
until 条件 -- 条件成立则结束循环(注意until条件后面没有分号)
end repeat;
-- 3)loop
myloop:loop
循环语句
if 条件
leave myloop; -- 条件成立时执行leave语句跳出loop循环语句,若是iterate,则相当于continue作用
end if;
end loop;
四、抛出异常
sql
create procedure pro_insert_student(
in id varchar(10),
in ssname varchar(20),
in sex varchar(5)
)
begin
declare easy_count int;
declare exit handler for SQLEXCEPTION
BEGIN
signal SQLSTATE '45002' set message_text='报异常了';
END;
#做检查,没有通过就抛出异常
#1、id是否已经重复
select count(*) into easy_count from student where sid=id;
if easy_count>0 then
signal SQLSTATE '45000' set message_text='id值重复';
end if;
if sex !='男' and sex !='女' then
signal SQLSTATE '45001' set message_text='性别不合法';
end if;
#2、sex是否是男或女
insert into student(sid,sname,ssex) values(id,ssname,sex);
end
drop procedure pro_insert_student;
call pro_insert_student(20,'六百六十六','女');
五、游标的使用
5.1含义
游标(cursor)可以理解为一个指向结果集中某条记录的指针,允许程序逐一访问结果集中的每条记录,并对其进行逐行操作和处理。
5.2声明游标
sql
declare 游标名称 cursor for 查询语句;
5.3打开游标
sql
open 游标名称;
5.4获取数据
sql
fetch 游标名称 into 变量[,变量,变量......]
5.5关闭游标
sql
close 游标名称;
本文借鉴了MySQL 存储过程(超详细)
学习更详细的知识可以看一下。