1、创建无参存储过程。
create procedure p1()
begin
select * from user;
end;
调用:
call procedure();
##注意,会出现语法错误,在select 那一句结束
mysql结束符;换成#
delimiter #
create procedure p1()
begin
select * from user;
end #
更换结束符为;
delimiter ;
调用:
call p1(); //无参
2、创建有参存储过程
有参的存储包括两种参数:传入参数和传出参数;
创建有参数存储过程:
DELIMITER #
CREATE PROCEDURE p2(
OUT p1 DECIMAL(9,3),
OUT p2 DECIMAL(9,3),
IN p3 INT
)
BEGIN
SELECT SUM(english) INTO p1 FROM exam WHERE math > p3;
SELECT AVG(english) INTO p2 FROM exam ;
END #
DELIMITER ;
p1和p2是检索并传出去的值,而p3是传入值。
调用:
CALL p2(@examSum, @examAvg, 80); //有参
当用完后,可以直接查询examSum和examAvg的值:
SELECT @examSum, @examAvg;
结果如下:
@examSum @examAvg
415.00 83.86
3、删除存储过程
drop procedure p1; //没有括号后面
4.在存储过程中使用循环
DELIMITER #
CREATE PROCEDURE pro1()
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i<100000 DO
INSERT INTO test VALUES(i, CONCAT('aa', i));
SET i=i+1;
END WHILE;
END #
调用存储过程
CALL pro1();
详细解读:
DECLARE i INT DEFAULT 0; // 定义一个变量为i,默认值为0
WHILE i<100000 DO // while循环
INSERT INTO test VALUES(i, CONCAT('aa', i)); //插入数据
SET i=i+1; // 让变量i增加一
END WHILE; // 结束循环
|
|