详情页

存储过程的创建和使用

时间:2023年12月10日

编辑:佚名

 mysql工作中用的比较多了,但是总觉得做为2年半的开发人员 对存储过程不太掌握和了解的话未免有些说不过去,所以最近几天学习了一下存储过程,发现还是比较简单的,下面就简单的记录和总结一下。
1.存储过程的语法结构
create procedure 存储过程名称(参数);//可以无参,也可以带参数,和java的方法名差不多
有参数的设置:(in|out|inout 参数名称 数据类型)
in:输入参数,表示该参数的值必须调用存储过程时指定
out:输出参数,表示可以被存储过程改变,并且可以返回
inout:输入输出参数,在调用时指定,可以被改变和返回
2.调用存储过程
call 存储过程名称();//如果定义了有参数这里也需要传入参数,和java调用方法一样
3.案例1(创建无参的存储过程并调用)
delimiter $$
create procedure pro1()
begin
select id from 表名;
end $$
delimiter ;
call pro1();
释:a.delimiter 定义结束符号开始定义了以$$作为结束,后面再次使用恢复为默认结束符分号,为了防止存储过程体中的分号对其造成影响,因为系统会默认以分号作为结束。
b.创建存储过程的名称后面不能带分号,会出现语法错误。
c.call调用存储过程时的参数必须一致,有参给参,无参穿孔即可,和java调用方法一样。
4.案例2(传入一个id,删除该数据,并查看剩余的数据条数)
delimiter $$
create procedure pro2(in cid int,out num int)
begin 
delete from 表名 where id=cid;
select count(id) into num form 表名;
end $$
delimiter ;
call pro2(id参数值,@num);
select @num;
释:1.into num  表示将查询出来的count(id) 赋值到该变量中。
       2.@num 变量声明。
       3.select @num; 表示查看该变量的值,也就是删除了数据之后总数还剩多少条。 
5.案例3(输入2个数,计算出最后的结果)
DELIMITER //
CREATE PROCEDURE pro1(IN n1 INT,IN n2 INT,OUT result INT)
BEGIN 
SET result=n1+n2;
END //
DELIMITER ;
SET @n1=10,@n2=28;
CALL pro1(@n1,@n2,@result);
SELECT @result;
释:1.SET @n1=10,@n2=28;  表示声明了2个变量
7.案例(计算2张表开始时间到结束时间总天数)
 DELIMITER 
CREATEPROCEDUREproday(OUTtotalINT)BEGINDECLAREn1INTDEFAULT0;DECLAREn1INTDEFAULT0;SELECTSUM(DATEDIFF(′2018−3−9′,′2018−3−8′))INTOn1FROMsettdailyaccountbalanceSELECTSUM(DATEDIFF(′2018−3−9′,′2018−3−8′))INTOn2FROMBalancestatementSETtotal=n1+n2;END
delimiter ;
CALL pro_day(@total)
SELECT @total
释:DATEDIFF()函数用来计算2个时间的天数,sum()用来统计全部的总天数
6.删除存储过程
drop procedure 存储过程名称;
drop procedure if exists 存储过程名称;
释:以上2条的区别在于如果不存在该存储过程第一条会报错,第二条则不会。
相关文章
猜你需要