存储过程创建与删除

存储过程和函数

存储过程和函数;类似于Java中的方法
好处:
1.提高代码的复用性
2.简化操作
函数
含义:一组预先编译好的SQL与语句的集合,理解成批处理语句
1.提高代码的重用性
2.简化操作
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
区别
存储过程:可以有0个返回,也可以有多个返回,适合做批量插入,批量更新
函数:有且仅有一个返回,适合做处理数据后返回一个结果

一、创建语法

create procedure 存储过程名(参数列表){
begin
存储过程体(一组合法的SQL语句)
end
}
注意:
1.参数列表包含三部分
参数模式 参数名 参数类型
举例:
in stuname varchar(20)

参数模式:
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
2. 如果存储过程体仅仅只有一句话,begin end 可以省略
存储过程体中的每条SQL语句的结尾要求必须加分号
存储过程的结尾可以使用的limiter重新设置
语法:
delimiter 结束标记
案例:
delimiter $

二、调用语法

call 存储过程名(实参列表);
1.空参列表
案例:插入到admin表中5条记录
select * from admin;

delimiter $
create procedure myp1()
begin
insert into admin(username,‘password’)
values(‘xyz’,‘123’),(‘wjk’,‘123’);
end $
调用:
call myp1()$

2.创建带in模式参数的存储过程
案例1.创建存储过程实现根据女神名,查询对应男神信息
create procedure myp2(in beautyname varchar(20))
begin
select bo.*
from boys bo
right jion beauty b on bo.id = b.boyfriend_id
where b.name = beautyname;
end $
调用:
call myp2(‘杨幂’);

案例2.创建存储过程实现,用户是否登录成功
create procedure myp3(in username varchar(20),in password varchar(20))
begin
declare result varchar(20) default ‘’; //声明并初始化
select count(*) into result //赋值
from admin
where admin.username = username
and admin.password = password;
select if (result>0,‘成功’,‘失败’); //使用
end $
调用:
call myp3(‘xyz’,‘123’); $

3.创建带out模式的存储过程
案例1.根据女神名返回对应男神名
create procedure myp4(in beautyname varchar(20),out boyname varchar(20))
begin
select bo.boyname into boyname
from boys bo
inner jion beauty b on bo.id = b.boyfriend_id
where b.name = beautyname
end $
调用:
call myp4(‘小花’,@bname) $
select @bname$

案例2.根据女神名返回对应男神名和男神魅力值
create procedure myp5(in beautyname varchar(20),out boyname varchar(20),out usercp varchar(20))
begin
select bo.boyname,bo.usercp into boyname,usercp
from boys bo
inner jion beauty b on bo.id = b.boyfriend_id
where b.name = beautyname
end $
调用:
call myp5(‘小花’,@bname,@usercp) $
select @bname,@usercp$

4.创建带inout模式参数的存储过程
案例1:传入a和b两个值,最终a和b都翻倍并返回
create procedure myp6(inout a int,inout b int)
begin
set a=a2;
set b=b
2;
end $
调用:
set @m=10$
set @n=20$
call myp6(@m,@n)$
select @m,@n

案例讲解:
1、创建存储过程实现传入用户名和密码,插入到admin表中
create procedure test_pro1(int username varchar(20),in password varchar(20))
begin
insert into admin(admin.username,password)
values(username,password);
end $

扫描二维码关注公众号,回复: 13458151 查看本文章

2、创建存储过程实现传入女神编号,返回女神名称和女神电话
create procedure test_pro2(in id int,out name varchar(20),out phone varchar(20))
begin
select b.name,b.phone into name,phone
from beauty b
where b.id = id;
end $

3、创建存储过程或函数实现传入两个女神生日,返回大小
create test_pro3(in birth1 datetime,in birth2 datetime,out result int)
begin
select datediff(birth1,birth2) into result;
end $
调用:
call test_pro3(‘1998-1-1’,now(),@result)$
select @result$

4、创建存储过程或函数实现传入一个日期,格式化成xx年xx月xx日并返回
create test_pro4(in mydate datetime,out strdate varchar(20))
begin
select date_format(mydate,‘%m年%n月%d日’) into strdate;
end $
调用:
call test_pro4(now(),@str)$
select @str $
5、创建存储过程或函数实现传入女神名,返回:女神and男神 格式的字符串
create test_pro5(in beautyname varchar(20),out str varchar(50))
begin
select concat(beautyname,’ and ',ifnull(boyname,‘null’)) into str
from boys bo
right jion beauty b on b.boyfriend_id = bo.id
where b.name = beautyname;
end $
调用:
call test_pro5(‘小花’,@str)$
select @str
删除:
drop procedure test_pro5 $
6、创建存储过程或函数,跟据传入的条目数和起始索引,查询beauty表的记录
create test_pro6(in startindex int,in size int)
begin
select * from beauty limit startindex,size;
end $
调用:
call test_pro6(3,5)$

三、删除存储过程

语法:drop procedure 存储过程名
drop procedure test_pro3;
drop procedure test_pro1,test_pro3; // 错误写法

四、查看存储过程的信息

desc myp2; //错误写法
show create procedure myp2; //正确写法

猜你喜欢

转载自blog.csdn.net/qq_52332852/article/details/121608130
今日推荐