存储过程的创建和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014508939/article/details/81485208

      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 $$
CREATE PROCEDURE pro_day(OUT total INT)
BEGIN 
DECLARE n1 INT DEFAULT 0;
DECLARE n1 INT DEFAULT 0;
SELECT SUM(DATEDIFF('2018-3-9','2018-3-8'))INTO n1 FROM sett_dailyaccountbalance 
SELECT SUM(DATEDIFF('2018-3-9','2018-3-8'))INTO n2 FROM  Balancestatement  
SET total=n1+n2;
END$$
delimiter ;
CALL pro_day(@total)
SELECT @total

释:DATEDIFF()函数用来计算2个时间的天数,sum()用来统计全部的总天数

     

6.删除存储过程

drop procedure 存储过程名称;

drop procedure if exists 存储过程名称;

释:以上2条的区别在于如果不存在该存储过程第一条会报错,第二条则不会

       

猜你喜欢

转载自blog.csdn.net/u014508939/article/details/81485208