MySQL 4 自定義函式

2021-07-31 20:41:28 字數 2067 閱讀 8853

使用者自定義函式(user-defined function, udf),是一種對mysql擴充套件的途徑,其用法與內建函式相同,自定義函式的兩個必要條件

函式可以返回任意型別的值,同樣可以接收這些型別的引數(理論上mysql自定義函式引數不能超過1024個)

create function [函式名] returns [返回值型別:string|integer|real|decimal] [函式體];
函式體中:

1. 函式體由合法的sql語句構成;

2. 函式體可以是簡單的select或insert語句;

3. 函式體如果為復合結構則使用begin…end語句;

4. 復合結構可以包含宣告,迴圈,控制結構;

select now();//顯示當前時間,如果我要用中文顯示,則需要用到date_format()函式

及就是:select date_format(now(), '%y年%m月%d日 %h點%i分%s秒');

但是每次這樣查詢又太麻煩,於是可以建立乙個不帶參的函式來完成,函式如下:

create function ft() returns varchar(30) return date_format(now(), '%y年%m月%d日 %h點%i分%s秒'); //輸入select ft(),結果為xx年xx月xx日

show function status;
create function func(mum1 smallint unsigned, num2 smallint unsigned)

returns float(10, 2) unsigned

return (num1 + num2)/2;

//帶有引數的求兩數平均值的函式

為了實現乙個輸入名字即插入一條資料的函式功能,我們可以這樣:

create function adduser(username varchar(20)) returns int unsigned

return insert test(username) values(username);

//這條語句實際上是錯誤的,因為最後insert語句執行完畢後的分號會歸納在sql語句中而不被當做函式結束的標識

這時候需要修改結束標識,即用delimiter//表示結束時必須輸入//

eg:select versiong();//

上述例子末尾加入//才會輸出結果

在此基礎上我們才可以執行建立乙個帶有sql語句的函式(這樣當分號被認為是sql語句的結束符時,我們可以規定其他符號為函式體結束符,例如上述的//)

create function adduser(username varchar(20)) returns int unsigned

return

insert test(username) values(username);

last_insert_id();

//

上述語句也是錯誤的,因為規定返回值int型別,而insert不能作為返回值返回int型別,我們繼續修改,要用到begin…end語句分塊

create function adduser(username varchar(20)) returns int unsigned

begin

insert test(username) values(username);

return last_insert_id();

//

上述語句執行結束後則建立函式成功,然後我們再用delimiter ;把結束符改回來即可,而且並不影響之前建立的函式的使用

mysql自定義函式優點 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql自定義函式命名 MySQL自定義函式

在使用 mysql 的過程中,mysql 自帶的函式可能完成不了我們的業務需求,這時候就需要自定義函式。自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區...

mysql 自定義函式

今天要做乙個排序,有中文和英文的,資料庫採用utf8編碼,排除來的不對,所以需要將中文轉換成中文的第乙個字母,然後來排序 先小小的看一下mysql的自定義函式 drop function if exists fntable 如果存在就刪除 delimiter 函式開始 create function...