数据库存储过程
存储函数名称 test()
自定义语句结束符号 delimiter $ --(替代语句中的;号,更好的区分)
存储过程开始及结束标识 begin.....end
给变量赋值 set @val=1; --(@后面是变量名称)
定义变量 declare val int default 2; --(val--变量名、int--数据类型、2--默认值)
1.创建存储过程–最简单的存储过程
delimiter $
create procedure test()
begin
select * from test;
end$
–在sql实行界面调用存储过程
call test();
–删除存储过程
drop procedure if exists test()
2.创建可以传参数的存储过程–in 输入参数
delimiter $
create procedure in_test(in n int)
begin
declare num int default 0; --设置变量num默认为0
declare total int default 0; --设置变量total默认为0
while num < n do --循环num<输入的n的时候
set num=num+1; --设置num=num+1
set total=total+num; --总数=累加0....n
end while; --结束循环
select total; --查询总数
end$
call test(10)$ --total=55
3.创建可以传参数的存储过程–out输出参数
delimiter $
create procedure out_test(in userId int,out nums int) --定义输入参数为userId,输出参数为nums
begin
delete from user where id=userId;
select count(id) from user into nums; --将count(id)的值存入nums
end$
delimiter ;
call out_test(1,@nums); --调用存储过程
select @nums; --查看输出的值
多out输出参数
delimiter $
create procedure outs_test(in userId int ,out nums int,out username varchar(20)) --定义输入参数userId,输出参数nums,username
begin
select name from user where id = userId into username; --name存入username
delete from user where id = userId;
select count(id) from user into nums; --将count(id)的值存入nums
end $
delimiter ;
call outs_test(3,@nums,@username); --调用存储过程
select @nums; --查看输出的值
select @username; --查看输出的值
4.创建可以传参数的存储过程–inout输入输出参数
delimiter $
create procedure inout_test( inout num int) --定义输入输出参数num
begin
set num=num+10;
end$
--**由于参数是inout类型,所以需要传入一个赋值过的变量,以便在存储过程内部对其修改后返回。
set @num=3; --现给一个赋值
call square(@num); --调用存储过程
select @num; --查询结果
参考链接: MySQL数据库-存储过程详解.