MySQL學習20:運算子與函數之自訂函數

來源:互聯網
上載者:User

標籤:

        一自訂函數簡介        (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:運算子與函數之自訂函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.