MySQL数据库——存储过程

简单介绍下存储过程:就是将一系列复杂的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
为了显示 何时,谁创建等详细信息的存储过程列表时候可以使用它。

猜你喜欢

转载自blog.csdn.net/qq_36120793/article/details/78950678