19 存储过程

19.1 存储过程

存储过程可以看成是对一系列 SQL 操作的批处理。

使用存储过程的好处:

  • 代码封装,保证了一定的安全性;
  • 代码复用;
  • 由于是预先编译,因此具有很高的性能。

包含 in、out 和 inout 三种参数。

19.2 执行存储过程

存储过程的执行比编写要频繁的多。MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL。CALL接受存储过程的名字以及需要传递给它的任意参数。 看下面的例子:

CALL productpricing(@pricelow,
            @pricehigh,
            @priceaverage);

其中,执行名为productpricing的存储过程,它计算并返回产品的最低、最高和平均价格。

19.3 创建存储过程

让我们来看一个返回产品平均价格的存储过程的例子:

CREATE PROCEDURE productpricing()
BEGIN
    SELECT Avg( prod_price ) AS priceaverage
    FROM products;
END;

此存储过程名为productpricing,用CREATE PROCEDURE productpricing()语句定义。如果存储过程接受参数,它们将在()中列举出来。BEGIN和END语句用来限定存储过程体,过程体本身仅是一个简单的SELECT语句。

在MySQL处理这段代码时,它创建一个新的存储过程productpricing。没有返回数据,因为这段代码并未调用存储过程,这里只是为以后使用而创建它。
如何使用这个存储过程?

CALL productpricing();

19.4 删除存储过程

DROP PROCEDURE productpricing;

注意没有使用后面的() ,只给出存储过程名。

19.5 使用参数

CREATE PROCEDURE productprcing(
OUT pl 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;

此存储过程接受3个参数,每个参数必须具有指定的类型,这里使用十进制值。 关键字OUT指出相应的参数用来从存储过程传出一个值(返回给调用者)。 MySQL支持IN(传递给存储过程)OUT(从存 储过程传出,如这里所用)和INOUT(对存储过程传入和传出)类型的参数。存储过程的代码位于BEGIN和END语句内。 

调用此存储过程,必须指定3个变量名,如下所示:

CALL productpricing(@pricelow,
            @pricehigh,
            @priceaverage);

在调用时,这条语句并不显示任何数据。它返回以后可以显示(或在其他处理中使用)的变量。

为了显示检索出的产品平均价格,可如下进行:

SELECT @priceaverage;

为了获得3个值,可使用以下语句:

SELECT @pricelow, @pricehigh, @priceaverage;

 19.6 检查存储过程

为显示用来创建一个存储过程的CREATE语句,使用SHOW CREATE PROCEDURE语句:

SHOW CREATE PROCEDURE ordertoal;

为了获得包括何时、由谁创建等详细信息的存储过程列表, 使用SHOW PROCEDURE STATUS

 

原文地址:https://www.cnblogs.com/xlzfdddd/p/10170879.html