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
還會將函數新增到 Performance Schema 的 user_defined_functions
表中,該表提供有關已安裝的可載入函數的執行時間資訊。請參閱第 29.12.22.10 節,「user_defined_functions 表」。
與 mysql.func
系統表一樣,Performance Schema 的 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
,則伺服器可能會意外關閉。