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該函數將使用
INSERT
,UPDATE
,DELETE
或其他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)