最新消息:关注【太平洋学习网】微信公众号,可以获取全套资料,【全套Java基础27天】【JavaEE就业视频4个月】【Android就业视频4个月】

mysql存储过程的使用案例

数据库 太平洋学习网 浏览 评论

mysql存储过程优点是执行效率非常快!因为存储过程是在数据库的服务器端执行的,缺点是移植性很差!不同数据库的存储过程是不能移植。为了便于理解,先看看student表的结构。

QQ截图20170620001653.png

1:查询student表所有数据的存储过程,mysql存储过程语句如下,后面格式都不再作解释:

DELIMITER $  //申明存储过程,$代表开始符号,另外一个$代表结束符号
CREATE PROCEDURE pro_test() //存储过程名称
BEGIN
select *from student;
END $
//调用存储过程方式
CALL pro_test();

运行结果和上图一样。

2:输入参的存储过程,虽然只有输入参数,但是还是会有结果的,mysql语句,IN代表关键字。

DELIMITER $
CREATE PROCEDURE pro_input(IN sid int)
BEGIN
select *from student where id = sid;
END $
//调用方式
CALL pro_input(901);

输出结果为id=901的那一行数据,关键字为OUT。

3:输出参存储过程。

DELIMITER $
CREATE PROCEDURE pro_out(OUT str varchar(20))
BEGIN
select name from student where id = 901;
set str = "";
END $
//调用方式
CALL pro_out(@str);
//获取输出参数str
select @str;

输出结果为:"张老大",虽然有赋值set str="",但是第二句如果不是单独使用则赋值无效,结果以select xxx为准。

4:输入输出参存储过程,关键字为INOUT。

DELIMITER $
CREATE PROCEDURE pro_input_out(INOUT n int)
BEGIN
select n;
set n = 100;
END $
//输入的n值为10,
set @n = 10;
CALL pro_input_out(@n);
SELECT @n;

输出结果为:10,和上面一样,以select xxx的结果为准。

5:带有if条件判断的mysql存储过程,代码如下。

DELIMITER $
CREATE PROCEDURE pro_testIf(IN num int,OUT str varchar(20))
BEGIN
         IF num=1 THEN
                  SET str='星期一';
         ELSEIF num=2 THEN
                  SET str='星期二';
         ELSEIF num=3 THEN
                  SET str='星期三';
         ELSE
                  SET str='输入错误';
         END IF;
END $
//调用存储过程
CALL pro_testIf(4,@str);
//获取输出字符串
SELECT @str;

输出结果为:“输入错误”,跟我们所学的if结果是一样的。

6:带有while循环语句的存储过程,需求: 输入一个整数,求和。例如,输入100,统计1-100的和。

DELIMITER $
CREATE PROCEDURE pro_testWhile(IN num int,OUT result int)
BEGIN
         -- 定义一个局部变量
         DECLARE i INT DEFAULT 1;
         DECLARE vsum INT DEFAULT 0;
         WHILE i<=num DO
               SET vsum = vsum+i;
               SET i=i+1;
         END WHILE;
         SET result=vsum;
END $
//调用while存储过程
CALL pro_testWhile(100,@result);
//输出1到100的和
SELECT @result;

7:将查询的结果赋值给变量,关键字为INTO,如下。

DELIMITER $
CREATE PROCEDURE pro_findById(IN eid int,OUT vname varchar(20) )
BEGIN
       SELECT name INTO vname FROM student WHERE id=eid;
END $
//调用存储过程,值会赋给vname 
CALL pro_findById2(901,@vname );
//获取值
SELECT @vname;

输出结果为:"张老大",和第3个存储过程的结果是一样的。

8:删除存储过程,步骤都一样,如下。

�DROP PROCEDURE pro_findById;� //pro_findById代表存储过程名称


来源网站:太平洋学习网,转载请注明出处:http://www.tpyyes.com/a/mysql_oracle/2017/0620/118.html

    与本文相关的文章

    发表我的评论
    取消评论

    表情

    您的回复是我们的动力!

    • 昵称 (必填)

    网友最新评论