在 MySQL 中创建带参数的存储过程?


您可以使用 IN 和 OUT 创建参数。IN 用于接收输入参数,OUT 可用于输出。

语法如下:

DELIMITER //
CREATE PROCEDURE yourProcedureName(IN yourParameterName dataType,OUT
   yourParameterName dataType
)
BEGIN
yourStatement1;
yourStatement2;
.
.
N
END;
//
DELIMITER ;

首先,我们将创建一个表。创建表的查询如下:

mysql> create table SumOfAll
   -> (
   -> Amount int
   -> );
Query OK, 0 rows affected (0.78 sec)

使用 insert 命令在表中插入一些记录。查询如下:

mysql> insert into SumOfAll values(100);
Query OK, 1 row affected (0.18 sec)

mysql> insert into SumOfAll values(330);
Query OK, 1 row affected (0.24 sec)

mysql> insert into SumOfAll values(450);
Query OK, 1 row affected (0.10 sec)

mysql> insert into SumOfAll values(400);
Query OK, 1 row affected (0.20 sec)

使用 select 语句显示表中的所有记录。查询如下:

mysql> select *from SumOfAll;

以下是输出结果:

+--------+
| Amount |
+--------+
| 100    |
| 330    |
| 450    |
| 400    |
+--------+
4 rows in set (0.00 sec)

现在,我们将创建一个存储过程,该过程将检查值是否存在于表中。如果给定值不存在于表中,则您将获得 NULL 值。

存储过程如下:

mysql> DELIMITER //
mysql> create procedure sp_ChechValue(IN value1 int,OUT value2 int)
   -> begin
   -> set value2=(select Amount from SumOfAll where Amount=value1);
   -> end;
   -> //
Query OK, 0 rows affected (0.20 sec)
mysql> delimiter ;

让我们用一些值调用存储过程,并将输出存储在会话变量中。

情况 1:值不存在于表中。

mysql> call sp_ChechValue(300,@isPresent);
Query OK, 0 rows affected (0.00 sec)

现在使用 select 语句检查变量 @isPresent 中的值。查询如下:

mysql> select @isPresent;

以下是输出结果:

+------------+
| @isPresent |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

情况 2:值存在。

查询如下。让我们调用存储过程:

mysql> call sp_ChechValue(330,@isPresent);
Query OK, 0 rows affected (0.00 sec)

检查会话变量 @isPresent 的值。查询如下:

mysql> select @isPresent;

以下是输出结果:

+------------+
| @isPresent |
+------------+
| 330        |
+------------+
1 row in set (0.00 sec)

更新于:2019年7月30日

4K+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始
广告