求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL存储过程参数
561 次浏览
5次  

在本教程中,您将学习如何编写具有参数的MySQL存储过程。还将通过几个存储过程示例来了解不同类型的参数。

MySQL存储过程参数简介

在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。

IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。 另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。

OUT - 可以在存储过程中更改OUT参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT参数的初始值。

INOUT - INOUT参数是IN和OUT参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。

在存储过程中定义参数的语法如下:

MODE param_name param_type(param_size)

上面语法说明如下 -

根据存储过程中参数的目的,MODE可以是IN,OUT或INOUT。

param_name是参数的名称。参数的名称必须遵循MySQL中列名的命名规则。

在参数名之后是它的数据类型和大小。和变量一样,参数的数据类型可以是任何有效的MySQL数据类型。

如果存储过程有多个参数,则每个参数由逗号(,)分隔。

让我们练习一些例子来更好的理解。 我们将使用示例数据库(yiibaidb)中的表进行演示。

MySQL存储过程参数示例

1.IN参数示例

以下示例说明如何使用GetOfficeByCountry存储过程中的IN参数来查询选择位于特定国家/地区的办公室。

USE `yiibaidb`;
DROP procedure IF EXISTS `GetOfficeByCountry`;
DELIMITER $$
USE `yiibaidb`$$
CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255))
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END$$
DELIMITER ;

countryName是存储过程的IN参数。在存储过程中,我们查询位于countryName参数指定的国家/地区的所有办公室。

假设我们想要查询在美国(USA)的所有办事处,我们只需要将一个值(USA)传递给存储过程,如下所示:

CALL GetOfficeByCountry('USA');

执行上面查询语句,得到以下结果 -

要在法国获得所有办事处,我们将France字符串传递给GetOfficeByCountry存储过程,如下所示:

CALL GetOfficeByCountry('France')

2.OUT参数示例

以下存储过程通过订单状态返回订单数量。它有两个参数:

orderStatus:IN参数,它是要对订单计数的订单状态。

total:存储指定订单状态的订单数量的OUT参数。

以下是CountOrderByStatus存储过程的源代码。

USE `yiibaidb`;
DROP procedure IF EXISTS `CountOrderByStatus`;
DELIMITER $$
CREATE PROCEDURE CountOrderByStatus(
IN orderStatus VARCHAR(25),
OUT total INT)
BEGIN
SELECT count(orderNumber)
INTO total
FROM orders
WHERE status = orderStatus;
END$$
DELIMITER ;

要获取发货订单的数量,我们调用CountOrderByStatus存储过程,并将订单状态传递为已发货,并传递参数(@total)以获取返回值。

CALL CountOrderByStatus('Shipped',@total);
SELECT @total;

执行上面查询语句后,得到以下结果 -

+--------+
| @total |
+--------+
| 303 |
+--------+
1 row in set

要获取正在处理的订单数量,调用CountOrderByStatus存储过程,如下所示:

执行上面查询语句后,得到以下结果 -

+------------------+
| total_in_process |
+------------------+
| 7 |
+------------------+
1 row in set

INOUT参数示例

以下示例演示如何在存储过程中使用INOUT参数。如下查询语句 -

DELIMITER $$
CREATE PROCEDURE set_counter(INOUT count INT(4),IN inc INT(4))
BEGIN
SET count = count + inc;
END$$
DELIMITER ;

上面查询语句是如何运行的?

set_counter存储过程接受一个INOUT参数(count)和一个IN参数(inc)。

在存储过程中,通过inc参数的值增加计数器(count)。

下面来看看如何调用set_counter存储过程:

SET @counter = 1;
CALL set_counter(@counter,1); -- 2
CALL set_counter(@counter,1); -- 3
CALL set_counter(@counter,5); -- 8
SELECT @counter; -- 8

在本教程中,我们向您展示了如何在存储过程中定义参数,并介绍了不同的参数模式:IN,OUT和INOUT。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



561 次浏览
5次
 捐助