MySQL的存储过程是什么?怎么用?

MySQL的存储过程是什么?怎么用?

使用存储过程

存储过程

存储过程简单来说,就是为了以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件。但他的作用不仅限于批处理。

为什么要处理存储过程

通过把处理封装在容易使用的单元中,简化复杂的操作。

使用统一存储过程,可防止错误,因为执行的步骤越多,出错的可能性就越大。

简化对变动的管理。如果变动了,我们只需修改存储过程就好。

提高性能,使用存储过程比单独的SQL语句要快

存在一些只能在单个请求中的MySQL元素和特性,存储过程可以使用他们来编写功能更强更灵活的代码。

总而言之就是:简单,安全,高性能。

使用存储过程

执行存储过程

mysql称存储过程的执行为调用。

CALL productpricing (@pricelow

@pricehigh

@priceaverage);

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

创建存储过程

例:返回产品平均价格的存储过程

CREATE PROCEDURE productpricing()

BEGIN

SELECT Avg(prod_price) AS priceaverage

FROM products;

END;

这个存储过程叫productpriceing,用CREATE PROCEDURE productpricing()语句定义。

如果,存储过程接受参数,他们将在()中列举出来。此存储过程没有参数,但后面的()依旧需要你跟着。BEGIN和END用来限定存储过程体。

那么如何使用这个存储过程呢?

CALL productpricing();

删除存储过程

DROP PROCEDURE productpricing;

使用参数

一般来说,存储过程是不显示结果的,而是把结果返回给你指定的变量

变量:内存中一个特定的位置,用来临时存储数据。

那么我们修改一手productpricing():

CREATE PROCEDURE productpricing(

OUT pl 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;

:ice_cream: pl存储产品的最低价格。每个参数必须具有指定的类型,这里使用十进制值。关键字out指出这个参数是用来从存储过程传出一个值(返回给调用者)。

IN:传递给存储过程

OUT: 从存储过程传出

INOUT: 对存储过程传入和传出

CALL productpricing (@pricelow

@pricehigh

@priceaverage);

mysql的变量名必须以@开始

我们想要的结果就存储到了上面的三个变量里面了

SELECT @pricelow;

用上面的语句,就可以看到这个值了。

我们再写一个例子,用用IN和OUT。ordertotal接受订单号并返回该订单的合计

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

### 建立智能存储过程

--NAME:ordertatal

--Parameters:onumber = order number

-- taxable = 0 if not taxable , 1 if taxable

-- ototal = order total variable

CREATE PROCEDURE ordertotal(

IN onumber INT ,

IN taxable BOOLEAN,

OUT ototal DECIMAL (8,2)

)COMMIT 'Obtain order total ,optionally adding tax'

BEGIN

--Declare variable for total

DECLARE total DECIMAL(8,2);

--Declare tax percentage

DECLARE taxrate INT DEFAULT 6;

--Get the order tatal

SELECT Sum(item_price*quantity)

FROM orderitems

WHERE order_num = onumber

INTO tatal;

--IS this taxble?

IF taxable THEN

--Yes,so add taxrate to the total

SELECT total+(total/100*taxrate) INTO total;

END IF;

--AND finally,save to out variable

SELECT total INTO ototal;

END;

-- 这玩意后面跟的是注释

DECLARE语句定义了两个局部变量,还支持设定默认值

SELECT语句的结果存储到了total

IF呢就是IF用法呗,真就执行。

检查存储过程

SHOW PROCEDURE STATUS LIKE '过程名';

会获得何时,谁创建等详细信息的存储过程列表。

相关故事

乐视手机如何获取ROOT权限
mobile365体育手机版入口

乐视手机如何获取ROOT权限

网易考拉怎么入驻?
www.38365-365.com

网易考拉怎么入驻?

《英魂之刃》玄武攻略
任丘36524便利店电话

《英魂之刃》玄武攻略