標籤:
一自訂函數簡介 (1)自訂函數定義
使用者自訂函數(user-defined function,UDF)是一種對MySQL資料庫擴充的途徑,其用法與內建函數相同。
(2)自訂函數的兩個必要條件 1)參數:可以有零個或多個。
2)返回值:只能有一個返回值。
使用自訂函數的注意事項
1)所有函數都有返回值,但不一定都有參數。
2)函數的參數與返回值之間沒有必然的內在聯絡。
3)函數可以返回任意類型的值,同樣可以接收這些類型的參數。
(3)建立自訂函數 建立自訂函數的文法結構:
CREATE FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL} routine_body;
(4)函數體
1)函數體由合法的SQL語句構成。
2)函數體可以是簡單的SELECT或INSERT語句。
3)函數體如果為複合結構則使用BRGIN...END語句。
4)複合結構可以包含聲明,迴圈,控制結構。
二建立不帶參數的自訂函數
執行個體:
查看當前日期時間和格式化目前時間
SELECT NOW();
SELECT DATE_FORMAT(NOW(),‘%Y年%m月%d日 %H點:%i分:%s秒‘);
對於習慣使用日期時間的來說,我們並不習慣上面的第一個,第二個格式化後的時間我們比較認同。每次都去格
式化日期時間會比較麻煩,因此我們考慮把這個過程自訂為一個函數。
將上面的過程封裝為一個函數
CREATE FUNCTION f1() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(),‘%Y年%m月%d日 %H
點:%i分:%s秒‘);
調用函數
SELECT f1();
三建立帶有參數的自訂函數
自訂一個求兩個數的平均數的函數,要求結果保留兩位小數。
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED) RETURNS FLOAT(10,2)
UNSIGNED RETURN (num1+num2)/2;
調用函數
SELECT f2(10,15);
四建立具有複合結構函數體的自訂函數
自訂一個返回最後插入資料表的記錄並且返回最後一個插入的ID號的函數
USE t1;
SELECT * FROM test;
CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNED BEGIN INSERT
test(username) VALUES(username); RETURN LAST_INSERT_ID(); END;
上面報錯的原因是MySQL語句結束符號報錯,我們平常一般的MySQL語句都是以;結束,但是複合結構中包括插
入語句,查詢語句等子SQL語句,而每個語句都會以;結束,因此MySQL資料庫的用戶端只會識別第一個;號,後面的
內容不再讀取,因此造成語句出錯。
我們做出以下修改:
修改語句的結束符號
DELIMITER //
建立自訂函數
CREATE FUNCTION adduser(username VARCHAR(20)) RETURNS INT UNSIGNED BEGIN INSERT
test(username) VALUES(username); RETURN LAST_INSERT_ID(); END//
DELIMITER ;
調用函數
SELECT adduser(‘Lee‘);
SELECT * FROM test;
五自訂函數的尋找
自訂函數的尋找
SHOW FUNCTION STATUS\G;
六刪除函數
刪除函數的文法結構:
DROP FUNCTION [IF EXISTS] function_name;
MySQL學習20:運算子與函數之自訂函數