zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    【WF2017】Mission Improbable
    【Codeforces 837D】Round Subset
    【Codeforces 788C】The Great Mixing
    【JSOI2008】最大数
    2.1图像的数字化
    MATLAB生成随机数
    四六级准考证号忘记了如何快速查询四六级成绩?
    加密与水印结合
    如何在 PyPI安装python的软件包?
    matlab中如何定义函数
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10170879.html
Copyright © 2011-2022 走看看