MySQL存储过程详解

MySQL是为以后的使用而保存的一条或多条MySQL语句的集合,存储过程思想上就是数据库 SQL 语言层面的代码封装与重用

存储过程编写比SQL语句复杂,但是使用起来非常高效,安全

创建存储过程语法如下:

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

注意:在命令行中输入的问题

mysql> delimiter //
mysql> CREATE PROCEDURE productpricing()
    -> BEGIN
    -> SELECT Avg(prod_price) AS priceaverage
    -> FROM products;
    -> END //

使用存储过程
存储过程实际上是一种函数

CALL productpricing();

删除存储过程

drop procedure productpricing;
drop procedure if EXISTS productpricing;

使用参数
一般,存储过程并不显示结果,而是把结果返回给你指定的变量
变量(variable)内存中一个特定的位置,用来临时存储数据。

CREATE PROCEDURE productpricing(
    OUT p1 DECIMAL(8,2),
    OUT ph DECIMAL(8,2),
    OUT pa DECIMAL(8,2)
)
BEGIN
SELECT MIN(prod_price)
INTO p1
FROM products;
SELECT MAX(prod_price)
INTO ph
FROM products;
SELECT avg(prod_price)
INTO pa
FROM products;
END;


关键字OUT指出相应的参数用来从存储过程传出 一个值(返回给调用者)。
MySQL支持IN(传递给存储过程)、
OUT(从存 储过程传出,如这里所用)
INOUT(对存储过程传入和传出)类型的参 数。
变量名 所有MySQL变量都必须以@开始。
调用存储过程

call productpricing(@pricelow,@pricehign,@priceaverage);

查询

SELECT @priceaverage;
SELECT @priceaverage,@pricehign,@pricelow;

使用in和out
创建

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;
END;

调用

call ordertotal(20005,@total);

查询

select @total;

检查存储过程
为显示用来创建一个存储过程的CREATE语句

show create PROCEDURE ordertotal;

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

show procedure status;

表比较多,用like过滤

show procedure status like 'ordertotal';

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/181.html