欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库——存储过程

程序员文章站 2022-06-02 08:21:59
...

什么是存储过程

存储过程(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