存储过程和函数
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法有效的SQL语句)
end
注意:
1、参数列表包含三部分
参数模式 参数名 参数类型
举例:
in stuname varchar(20)
参数模式:
in:该参数可以作为输入,也就是该参数需要调用方传入值
out:该参数可以作为输出,也就是该参数可以作为返回值
inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
2、如果存储过程体仅仅只有一句话,begin end可以省略
存储过程体中的每条SQL语句的结尾要求必须加分号。
存储过程的结尾可以使用delimiter重新设置
语法:
delimiter 结束标记
案例:
delimiter $
call 存储过程名(实参列表);
select * from admin;
delimiter $
create procedure myp1()
begin
insert into admin(username,password) values('john1','000'),('lily','000'),('rose','000'),('jack','000'),('tom','000');
end $
call myp1() $;
create PROCEDURE myp2(in beautyName varchar(20))
begin
select bo.* from boys bo right join beauty b on bo.id=b.boyfriend_id where b.name=beautyName;
end $
call myp2('柳岩') $;
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('张飞','8888') $
create procedure myp5(in beautyName varchar(20),out boyName varchar(20))
begin
select bo.boyname into boyName from boys bo inner join beauty b on bo.id=b.boyfriend_id where b.name=beautyName;
end $
set @bName$
call myp5('柳岩',@bName)$
select @bName
create procedure myp6(in beautyName varchar(20),out boyName varchar(20),out userCP int)
begin
select bo.boyname,bo.userCP into boyName,userCP from boys bo inner join beauty b on bo.id=b.boyfriend_id where b.name=beautyName;
end $
call myp6('小昭',@bName,@usercp);
create procedure myp8(inout a int,inout b int)
begin
set a=a*2;
set b=b*2;
end $
set @m=10$
set @n=20$
call myp8(@m,@n)$
select @m,@n$
语法: drop procedure 存储过程名
drop procedure test_pro3;
desc myp2;
show create procedure myp2;
create procedure test_pro1(in username varchar(20),in loginPwd varchar(20))
begin
insert into admin(admin.username,password) values(username,loginpwd)
end $
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 $
call test_pro2(1,@n,@p);
create procedure 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)$
create procedure test_pro4(in mydate datetime,out strDate varchar(50))
begin
select DATE_FORMAT(mydate,'%y年%m月%d日') into strDate;
end $
call test_pro4(NOW(),@str) $
select @str $
desc beauty;
create procedure test_pro5(in beautyName varchar(50),out str varchar(50))
begin
select concat(beautyName,' and ',boyName) into str from boys bo right join beauty b on b.boyfriend_id=bo.id where b.name=beautyName;
end $
call test_pro5('柳岩',@str)$
select @str $
create procedure test_pro6(in startIndex int,in size int)
begin
select * from beauty limit startIndex,size
end $
call test_pro6(3,5) $
函数
create function 函数名(参数列表) returns 返回类型
begin
函数体
end
select 函数名(参数列表)
show create function myf3;
drop function myf3;
create function test_fun1(num1 float,num2 float) returns float
begin
declare sum float default 0;
set sum=num1+num2;
return sum;
end $
select test_fun1(1,2)$