6、存储函数详解,创建,查看,修改,删除
存儲(chǔ)函數(shù)和存儲(chǔ)過(guò)程一樣,都是在數(shù)據(jù)庫(kù)中定義一些 SQL 語(yǔ)句的集合。存儲(chǔ)函數(shù)可以通過(guò) return 語(yǔ)句返回函數(shù)值,主要用于計(jì)算并返回一個(gè)值。而存儲(chǔ)過(guò)程沒(méi)有直接返回值,主要用于執(zhí)行操作。
在 MySQL 中,使用 CREATE FUNCTION 語(yǔ)句來(lái)創(chuàng)建存儲(chǔ)函數(shù),其語(yǔ)法形式如下:
CREATE FUNCTION sp_name ([func_parameter[...]]) RETURNS type [characteristic ...] routine_body其中:
- sp_name 參數(shù):表示存儲(chǔ)函數(shù)的名稱(chēng);
- func_parameter:表示存儲(chǔ)函數(shù)的參數(shù)列表;
- RETURNS type:指定返回值的類(lèi)型;
- characteristic 參數(shù):指定存儲(chǔ)函數(shù)的特性,該參數(shù)的取值與存儲(chǔ)過(guò)程是一樣的;
- routine_body 參數(shù):表示 SQL 代碼的內(nèi)容,可以用 BEGIN…END 來(lái)標(biāo)示 SQL 代碼的開(kāi)始和結(jié)束。
注意:在具體創(chuàng)建函數(shù)時(shí),函數(shù)名不能與已經(jīng)存在的函數(shù)名重名。除了上述要求外,推薦函數(shù)名命名(標(biāo)識(shí)符)為 function_xxx 或者 func_xxx。
func_parameter 可以由多個(gè)參數(shù)組成,其中每個(gè)參數(shù)由參數(shù)名稱(chēng)和參數(shù)類(lèi)型組成,其形式如下:
[IN | OUT | INOUT] param_name type;其中:
- IN 表示輸入?yún)?shù),OUT 表示輸出參數(shù),INOUT 表示既可以輸入也可以輸出;
- param_name 參數(shù)是存儲(chǔ)函數(shù)的參數(shù)名稱(chēng);
- type 參數(shù)指定存儲(chǔ)函數(shù)的參數(shù)類(lèi)型,該類(lèi)型可以是 MySQL 數(shù)據(jù)庫(kù)的任意數(shù)據(jù)類(lèi)型。
例 1
使用 CREATE FUNCTION 創(chuàng)建查詢(xún) tb_student 表中某個(gè)學(xué)生姓名的函數(shù),SQL 語(yǔ)句和執(zhí)行過(guò)程如下:
上述代碼中:
1、創(chuàng)建了 func_student 函數(shù),
2、該函數(shù)擁有一個(gè)類(lèi)型為 INT(11) 的參數(shù) id,
3、返回值為 VARCHAR(20) 類(lèi)型。
4、SELECT 語(yǔ)句從 tb_student 表中查詢(xún) id 字段值等于所傳入?yún)?shù) id 值的記錄,同時(shí)返回該條記錄的 name 字段值。
創(chuàng)建函數(shù)與創(chuàng)建存儲(chǔ)過(guò)程一樣,需要通過(guò)命令 DELIMITER // 將 SQL 語(yǔ)句的結(jié)束符由“;”修改為“//”,最后通過(guò)命令 DELIMITER ; 將結(jié)束符號(hào)修改成 SQL 語(yǔ)句中默認(rèn)的結(jié)束符號(hào)。
如果在存儲(chǔ)函數(shù)中的 RETURN 語(yǔ)句返回一個(gè)類(lèi)型不同于函數(shù)的 RETURNS 子句中指定類(lèi)型的值,返回值將被強(qiáng)制為恰當(dāng)?shù)念?lèi)型。比如,如果一個(gè)函數(shù)返回一個(gè) ENUM 或 SET 值,但是 RETURN 語(yǔ)句返回一個(gè)整數(shù),對(duì)于 SET 成員集的相應(yīng)的 ENUM 成員,從函數(shù)返回的值是字符串。
拓展閱讀
由于存儲(chǔ)函數(shù)和存儲(chǔ)過(guò)程的查看、修改、刪除等操作幾乎相同,所以我們不再詳細(xì)講解如何操作存儲(chǔ)函數(shù)了。
查看存儲(chǔ)函數(shù)的語(yǔ)法如下:
SHOW FUNCTION STATUS LIKE 存儲(chǔ)函數(shù)名; SHOW CREATE FUNCTION 存儲(chǔ)函數(shù)名; SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=存儲(chǔ)函數(shù)名;可以發(fā)現(xiàn),操作存儲(chǔ)函數(shù)和操作存儲(chǔ)過(guò)程不同的是將 PROCEDURE 替換成了 FUNCTION。
修改存儲(chǔ)函數(shù)的語(yǔ)法如下:
ALTER FUNCTION 存儲(chǔ)函數(shù)名 [ 特征 ... ]存儲(chǔ)函數(shù)的特征與存儲(chǔ)過(guò)程的基本一樣。
刪除存儲(chǔ)過(guò)程的語(yǔ)法如下:
DROP FUNCTION [ IF EXISTS ] <函數(shù)名>總結(jié)
以上是生活随笔為你收集整理的6、存储函数详解,创建,查看,修改,删除的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 5、删除存储过程(DROP PROCED
- 下一篇: 7、调用存储过程和函数