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