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:在函數中輸入函數代碼的地方。

MariaDB函數

2. 調用函數

可以看到程序成功執行並創建了一個新的函數。現在可以調用這個新創建的函數了,如下所示:

MariaDB函數

3. 刪除函數

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

語法:

DROP FUNCTION [ IF EXISTS ] function_name;

參數說明

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

示例:

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

DROP FUNCTION CalcValue;

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

MariaDB函數

或通過查詢下面語句 -

MariaDB [testdb]> SELECT *, EVENT_SCHEMA AS `Db`, EVENT_NAME AS `Name` FROM information_schema.`EVENTS` WHERE `EVENT_SCHEMA`='testdb';
Empty set (0.01 sec)
0 條評論,你可以發表評論,我們會進行改進
Comment author placeholder