CREATE [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name
RETURNS {STRING|INTEGER|REAL|DECIMAL}
SONAME shared_library_name
此陳述式載入名為 function_name
的可載入函數。( CREATE FUNCTION
也用於建立儲存函數;請參閱 第 15.1.17 節,「CREATE PROCEDURE 和 CREATE FUNCTION 陳述式」。)
可載入函數是一種擴展 MySQL 的方式,透過新增一個功能,使其像原生(內建)的 MySQL 函數一樣運作,例如 ABS()
或 CONCAT()
。請參閱新增可載入函數。
function_name
是在 SQL 語句中用於調用函數的名稱。RETURNS
子句表示函數的返回值類型。DECIMAL
是 RETURNS
之後的合法值,但目前 DECIMAL
函數會回傳字串值,應如同 STRING
函數一樣撰寫。
如果已存在同名的可載入函數,IF NOT EXISTS
可防止錯誤發生。但如果已存在同名的內建函數,則無法防止錯誤發生。IF NOT EXISTS
也支援 CREATE FUNCTION
語句。請參閱函數名稱解析。
若提供 AGGREGATE
關鍵字,則表示該函數為彙總(群組)函數。彙總函數的運作方式與 MySQL 原生的彙總函數完全相同,例如 SUM()
或 COUNT()
。
shared_library_name
是包含實現函數程式碼的共享程式庫檔案的基本名稱。該檔案必須位於外掛程式目錄中。此目錄由 plugin_dir
系統變數的值指定。如需更多資訊,請參閱第 7.7.1 節,「安裝和解除安裝可載入函數」。
CREATE FUNCTION
需要 mysql
系統綱要的 INSERT
權限,因為它會在 mysql.func
系統資料表中新增一列以註冊函數。
CREATE FUNCTION
也會將函數新增至效能綱要的 user_defined_functions
資料表,其中提供關於已安裝可載入函數的執行階段資訊。請參閱第 29.12.22.10 節,「user_defined_functions 資料表」。
與 mysql.func
系統資料表一樣,效能綱要的 user_defined_functions
資料表列出了使用 CREATE FUNCTION
安裝的可載入函數。與 mysql.func
資料表不同的是,user_defined_functions
資料表也列出了由伺服器元件或外掛程式自動安裝的可載入函數。由於此差異,user_defined_functions
比 mysql.func
更適合用於檢查已安裝哪些可載入函數。
在正常的啟動順序期間,伺服器會載入在 mysql.func
資料表中註冊的函數。如果伺服器以 --skip-grant-tables
選項啟動,則不會載入資料表中註冊的函數,並且這些函數將無法使用。
若要升級與可載入函數相關聯的共享程式庫,請發出 DROP FUNCTION
語句,升級共享程式庫,然後發出 CREATE FUNCTION
語句。如果您先升級共享程式庫,然後使用 DROP FUNCTION
,則伺服器可能會意外關閉。