MySQL自定義函數(shù)(一)- 簡(jiǎn)單使用篇

MySQL自定義函數(shù):


整理下MySQL自定義函數(shù)的使用,以前用的時(shí)候沒(méi)整理下來(lái),現(xiàn)在來(lái)邊回顧邊記錄下。

我們平時(shí)寫SQL的時(shí)候,都會(huì)用到系統(tǒng)函數(shù),什么字符串函數(shù),日期函數(shù),這都是每個(gè)數(shù)據(jù)庫(kù)自帶的,當(dāng)這些函數(shù)不能滿足我們的需求的時(shí)候,我們也可以自定義函數(shù),怎么操作呢?

語(yǔ)法
CREATE
    [DEFINER = user]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
    [characteristic ...] routine_body

func_parameter:
    param_name type

type:
    Any valid MySQL data type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
    Valid SQL routine statement

create function 就是創(chuàng)建一個(gè)函數(shù)的基本語(yǔ)法,然后我們得有函數(shù)名,我們定義的函數(shù)有沒(méi)有參數(shù),返回值是什么,然后就是具體的邏輯了。

Hello World!

好了,我們來(lái)一個(gè)MySQL UDF版的Hello World

create function say_hi() returns varchar(20)
return 'hello world!'
;

每次調(diào)用這個(gè)函數(shù),就會(huì)返回'hello world!'


下面,進(jìn)階一下,我們傳個(gè)參數(shù)進(jìn)去,

create function say_hi_to_you(user_name varchar(10)) returns varchar(20)
return concat('hello ',user_name)
;

實(shí)際用的時(shí)候,也和其他函數(shù)一樣,


  • 注意
    這時(shí)候,我們傳個(gè)中文的名字試試


看上去,像是字符編碼的問(wèn)題,然后,在網(wǎng)上找了找,沒(méi)有找到類似的問(wèn)題,但是,隱約感覺(jué)可以通過(guò)增加字符編碼搞定,就試了下

create function say_hi_to_you(user_name varchar(10)) returns varchar(20) charset utf8
return user_name;

我就在函數(shù)返回的時(shí)候,加上了utf-8編碼,但是還是不行,困惑了好一會(huì)兒,想到,返回值設(shè)置了編碼,參數(shù)應(yīng)該也可以設(shè)置編碼吧,就改了下

create function say_hi_to_you(user_name varchar(10) charset utf8) returns varchar(20) charset utf8
return user_name;

這下可以了,我感覺(jué)這個(gè)應(yīng)該和數(shù)據(jù)庫(kù)配置有關(guān),我這里沒(méi)有該數(shù)據(jù)庫(kù)默認(rèn)編碼為UTF-8,如果改了的話,估計(jì)沒(méi)有這個(gè)問(wèn)題。

簡(jiǎn)單使用篇想到這里了。

參考文檔

官方介紹:https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容