MySQL的存储过程是什么?如何使用

举报
阿柠 发表于 2022/09/30 11:20:29 2022/09/30
【摘要】 使用存储过程 存储过程存储过程简单来说,就是为了以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件。但他的作用不仅限于批处理。 为什么要处理存储过程通过把处理封装在容易使用的单元中,简化复杂的操作。使用统一存储过程,可防止错误,因为执行的步骤越多,出错的可能性就越大。简化对变动的管理。如果变动了,我们只需修改存储过程就好。提高性能,使用存储过程比单独的SQL语句要快存在一些...

使用存储过程

存储过程

存储过程简单来说,就是为了以后的使用而保存的一条或多条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 '过程名';

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。