MariaDB過程
MariaDB程序是一個存儲的程序,用來傳遞參數。它不像函數那樣需要返回一個值(當然也不用返回)。
可以創建和刪除像函數一樣的過程。
1. 創建過程
可以像創建MariaDB中的函數一樣創建過程。
語法:
CREATE
[ DEFINER = { CURRENT_USER | user_name } ]
PROCEDURE procedure_name [ (parameter datatype [, parameter datatype]) ]
[ LANGUAGE SQL
| DETERMINISTIC
| NOT DETERMINISTIC
| { CONTAINS SQL
| NO SQL
| READS SQL DATA
| MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'comment_value'
BEGIN
declaration_section
executable_section
END;
參數說明
- DEFINER:可選。
- procedure_name:在MariaDB中分配給此過程的名稱。
- Parameter:傳入過程的一個或多個參數。創建過程時,可以聲明三種類型的參數:
- IN:參數可以被程序引用。 該參數的值不能被程序覆蓋。
- OUT:參數不能被程序引用,但參數的值可以被程序覆蓋。
- IN OUT:參數可以被程序引用,參數的值可以被程序覆蓋。
- LANGUAGE SQL:語法爲可移植語法,但不會影響函數。
- DETERMINISTIC:表示該函數將始終返回給定一組輸入參數的一個結果。
- NOT DETERMINISTIC:表示給定一組輸入參數,該函數可能會返回不同的結果。 結果可能受到表格數據,隨機數字或服務器變量的影響。
- CONTAINS SQL:這是默認的。這是一個告知MariaDB該函數包含SQL的信息性子句,但數據庫不驗證它是真的。
- NO SQL:這是一個信息性子句,不使用也不會影響功能。
- READS SQL DATA:這是一個告知MariaDB的函數,它將使用
SELECT
語句讀取數據,但不會修改任何數據。 - MODIFIES SQL DATA:這是一個告知MariaDB的信息子句,該函數將使用
INSERT
,UPDATE
,DELETE
或其他DDL語句修改SQL數據。 - declaration_section:聲明局部變量的過程中的位置。
- executable_section:輸入過程代碼的過程中的位置。
示例
在MariaDB數據庫中創建一個名爲「CalcValue」
的過程。參考以下實現代碼 -
DELIMITER //
CREATE procedure CalcValue ( OUT ending_value INT )
DETERMINISTIC
BEGIN
DECLARE total_value INT;
SET total_value = 50;
label1: WHILE total_value <= 3000 DO
SET total_value = total_value * 2;
END WHILE label1;
SET ending_value = total_value;
END; //
DELIMITER ;
打開HeidiSQL,執行上面創建語句 -
現在刷新左側的testdb數據庫,可以看到名爲「CalcValue」的過程已創建。
編輯或查看這個過程,如下圖所示 -
2. 調用過程
現在可以看到名爲「CalcValue」的過程已創建。可以參考如下方式來調用過程:
MariaDB [testdb]> CALL CalcValue(@salary);
Query OK, 0 rows affected (0.00 sec)
MariaDB [testdb]> select @salary;
+---------+
| @salary |
+---------+
| 3200 |
+---------+
1 row in set (0.00 sec)
3. 刪除過程
可以使用以下命令刪除過程:
語法:
DROP procedure [ IF EXISTS ] procedure_name;
參數說明:
- procedure_name:它指定要刪除的過程的名稱。
示例:
DROP procedure CalcValue;
可以看到現在過程已經被刪除,並且在列表中不可見。