在 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)
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP