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的信息子句,該函數將使用INSERTUPDATEDELETE或其他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,執行上面創建語句 -

MariaDB過程

現在刷新左側的testdb數據庫,可以看到名爲「CalcValue」的過程已創建。

MariaDB過程

編輯或查看這個過程,如下圖所示 -

MariaDB過程

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;

可以看到現在過程已經被刪除,並且在列表中不可見。

MariaDB過程