在 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+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.