数据库——存储过程

什么是存储过程

存储过程(Stored Procedure)是在大型[数据库系统]中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。

为什么使用存储过程

  • 简单
    通过把处理封装在容易使用的单元中,简化复杂的操作
  • 安全
    通过存储过程限制对基础数据的访问减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会。
  • 高性能
    因为使用存储过程比使用单独的SQL语句要快。存储过程编译过。
    缺点也是有的
  • 编写存储过程需要更高的技巧
  • 可能没有权限创建存储过程

怎样使用存储过程

创建存储过程

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

执行存储过程(调用)

CALL productpricing();

删除存储过程

DROP PROCEDURE productpricing;

没有括号,只给出存储过程名。如果指定的存储过程不存在,删除会产生一个错误,可以使用

DROP PROCEDURE IF EXISTS;

使用参数

CREATE PROCEDURE productpricing(
    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

调用

productpricing(@pricehigh,
               @pricelow,
               @priceavarage);

变量名 所有MySQL变量都必须以@开始

显示变量

SELECT @pricehigh
SELECT @pricehigh, @pricelow, @priceavarage

使用IN和OUT参数

建立智能存储过程

CREATE PROCEDURE ordertotal(
    IN onumber INT,
    IN taxable BOOLEAN,
    OUT ototal DECIMAL(8,2)
)COMMENT 'Obtain order total, optionally adding tax'
BEGIN
    --Declare variable fpr 
END

前置--注释
Declare 语句声明局部变量
IF语句判断是否为真

检查存储过程

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

你可能感兴趣的:(数据库——存储过程)