5.2.12. procedure存储过程相关¶
一.创建存储过程:
create procedure sp_name()
begin
.........
end
二.调用存储过程:
call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递
三.删除存储过程:
drop procedure sp_name//
不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
四.其他常用命令:
1.show procedure status
2.show create procedure sp_name
常见问题:
存储过程有;号,在sql执行时遇到;号就会执行
解决办法:
DELIMITER // #设定出现//才执行
然后再在命令行时写入procedure代码
最后输入“//”后procedure就生成了
DELIMITER ; #还原设定
call proc(xxx)
实例¶
创建带参数的存储过程:
CREATE PROCUDURE productpricing(
OUT p1 DECIMAL(8,2),
OUT ph DECIMAL(8,2),
OUT pa DECIMAL(8,2)
)
BEGIN
SELECT Min(prod_price) INTO pl FROM products;
SELECT Max(prod_price) INTO ph FROM products;
SELECT Avg(prod_price) INTO pa FROM products;
END;
//DECIMAL用于指定参数的数据类型
//OUT用于表明此值是用于从存储过程里输出的
//MySQL支持 OUT, IN, INOUT
调用带参数的存储过程:
CALL productpricing(@pricelow, @pricehigh, @priceaverage);
//所有的参数必须以@开头
//想获取@priceaverage等的值
SELECT @priceaverage, @pricelow, @priceaverage;
// 另一个带IN和OUT参数的存储过程
CREATE PROCEDURE ordertotal(
IN onumber INT,
OUT ototal DECIMAL(8,2)
)
BEGIN
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO ototal;
END;
// 调用方法
CALL ordertotal(20005, @total);
SELECT @total;