MariaDB函式


MariaDB函式是一個儲存的程式,用於將引數傳遞給它們並獲取函式的返回值。

我們可以在MariaDB中建立和刪除函式。

1. MariaDB建立函式

可以在MariaDB中建立自己的函式:

語法:

CREATE   
[ DEFINER = { CURRENT_USER | user_name } ]   
FUNCTION function_name [ (parameter datatype [, parameter datatype]) ]  
RETURNS return_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;

1. 建立函式

在MariaDB資料庫中建立一個函式CalcValue。參考下面程式碼 -

DELIMITER //
CREATE FUNCTION CalcValue ( starting_value INT )
RETURNS INT DETERMINISTIC
BEGIN
   DECLARE total_value INT;
   SET total_value = 0;
   label1: WHILE total_value <= 3000 DO
     SET total_value = total_value + starting_value;
   END WHILE label1;
   RETURN total_value;
END; //
DELIMITER ;

引數說明

  • DEFINER子句:它是一個可選的子句。如果沒有指定,定義者是建立函式的使用者。 如果您希望指定不同的定義者,則必須包含DEFINER子句,其中user_name是該函式的定義者。
  • function_name:指定要在MariaDB中分配給此函式的名稱。
  • return_datatype:它指定函式返回值的資料型別。
  • 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:在函式中輸入函式程式碼的地方。

2. 呼叫函式

可以看到程式成功執行並建立了一個新的函式。現在可以呼叫這個新建立的函式了,如下所示:

3. 刪除函式

要刪除MariaDB資料庫中的自定義函式很容易。比如要上我們上面建立的函式,請參考以下語法。

語法:

DROP FUNCTION [ IF EXISTS ] function_name;

引數說明

  • function_name:它指定想要刪除的函式的名字。

範例:

在上面,我們已經建立了一個名為「CalcValue」的函式。假設現在要刪除這個函式,可通過以下語句 -

DROP FUNCTION CalcValue;

現在,可以看到該函式已被刪除,不再出現在左側列表中。

或通過查詢下面語句 -

MariaDB [testdb]> SELECT *, EVENT_SCHEMA AS `Db`, EVENT_NAME AS `Name` FROM information_schema.`EVENTS` WHERE `EVENT_SCHEMA`='testdb';
Empty set (0.01 sec)