简单介绍下存储过程:就是将一系列复杂的SQL语句打包成一个过程,通过开始和结束的特殊字符让系统知道应该读到哪里。
对于存储过程存在的原因,大家都了解,将复杂的存储封装成一个过程有利于我们进行操作,并且由于这种批处理打包行为,在性能上也有提高,写好的存储过程还能保证用户不会出错,安全性能也能提高。基于以上原因,我们有了存储过程这一东西。
part 1 创建存储过程和调用
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END;
从上方代码不难看出,我们用 CREATE PROCEDURE productpricing()来声明创建存储过程,如果存储过程需要参数,我们可以在 括号 内 给出 。 BEGIN 和 END 用来定义存储过程的开始和结束 。
另外注意,在mySQL命令行中设置存储过程,要注意分隔符变化的问题 BEGIN 不变, 但是之前要加上 DELIMITER // 告诉系统 用 // 作为新的语句分隔符 ,结束的语句应该是 END // 而不是 END。
那如何调用我们创建的这个存储过程呢? 更简单了!
CALL productpricing();
因为存储过程实际上也是一种函数,所以调用的时候要加上();
part 2 删除存储过程
很简单!
DROP PROCEDURE productpricing;
这里需要说明下,我们只有当他存在时候才能删除,否则会报错的。
part 3 使用参数
我们从一个例子说起:
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;
这里的IN是指被传入存储过程的参数,OUT是指存储过程产出的参数 。
我们可以这么调用它:
CALL ordertotal(20005,@total)
tip:MySQL的变量都必须以@开始。
为了显示我们这个过程的结果,我们可以这样:
SELECT @total;
part 4 完整的存储过程
CREATE PROCEDURE ordertotal(
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal DECIMAL(8,2)
) COMMENT 'Obtain order total, optionally adding tax'//这COMMENT不是必须的,/如果给出,将会在 SHOW PROCEDURE STATUS的结果中显示。
-- 注释
DELARE total DECIMAL(8,2);
-- 注释
DELARE taxrate INT default 6;
-- 注释
SELECT Sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
INTO total;
--注释
IF taxable THEN
SELECT total+(total/100*taxrate) INTO total;
END IF;
--注释
SELECT total INTO ototal;
END;
注意着了用 DECLARE 语句定义了两个局部变量,这样的定义要求指定变量名和数据类型,他也支持可选默认值。
我们还是用了一个IF 语句。
下面是调用和显示:
CALL ordertotao(20005, 0,@total)
part 5 检查存储过程
为显示用来创建一个存储过程的CREATE语句,使用SHOW CREATE PROCEDURE
为了显示 何时,谁创建等详细信息的存储过程列表时候可以使用它。