如何在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)
阅读更多:MySQL 教程