1、MySQL創建函數語法:
CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body func_parameter: param_name type type: Any valid MySQL data type routine_body: Valid SQL routine statement
注意:自定義函數不能跨庫使用
mysql> DELIMITER // mysql> CREATE FUNCTION Ver_Compare (n INT, m INT) -> RETURNS VARCHAR(50) #聲明返回的數據類型 -> BEGIN -> DECLARE s VARCHAR(50); -> IF n = m THEN SET s = 'equals'; -> ELSE -> IF n > m THEN SET s = 'greater'; -> ELSE SET s = 'less'; -> END IF; -> SET s = CONCAT('is ', s, ' than'); -> END IF; -> SET s = CONCAT(n, ' ', s, ' ', m, '.'); -> RETURN s; #一個實際的返回值
-> END // mysql> DELIMITER ;
由上述例子,不難看出,自定義函數的創建其實和create存儲過程還是很相似的。
2、函數調用
自定義函數雖然在創建定義上和存儲過程類似,但調用時卻有些許的不一樣。
mysql> call Ver_Compare(1,2); ERROR 1305 (42000): PROCEDURE db1.Ver_Compare does not exist mysql> set @ax = Ver_Compare(1,2); mysql> select @ax; +-------------------+
| @ax |
+-------------------+
| 1 is less than 2. |
+-------------------+
在我們調用函數的時候,函數需要出現在 = 的右邊(也就是說調用函數需要有變量接收其結果)
3、其他
>查看所有自定義函數:show function status\G;
>刪除指定自定義函數:drop function func_name;