7-1回顧和概述
7-2自定義函數簡介
1.自定義函數
用戶自定義函數(user-defined function, UDF)是一種對MySQL擴展的途徑, 其用法與內置函數相同。
自定義函數的兩個必要條件:
- a.參數
- b.返回值
函數可以返回任意類型的值,同樣可以接受這些類型的參數;
函數的參數與返回值之間,沒有必然的聯繫。
2.創建自定義函數
CREATE FUNCTION function_name
RETURNS
{STRING|INTEGER|REAL|DECIMAL}
routine_body - 函數體
3.關於函數體
- (1)函數體由合法的SQL語法構成;
- (2)函數體可以是簡單的SELECT或INSERT語句;
- (3)函數體如果爲複合結構則使用BEGIN...END語句;
- (4)複合結構可以包括聲明,循環,控制結構。
7-3創建不帶參數的自定義函數
創建日期時間自定義函數:
create function f1()
returns varchar(30)
return date_format(now(),'%Y年%m月%d日 %H點:%i分:%s秒');
select f1();
DATE_FORMAT()函數在格式化日期格式時,應該是百分號在代表年、月、日的字母前面,字母的大小寫不同,所表示格式也有所區別:
select date_format(now(),'%Y-%m-%d'),其結果是: 2015-07-04
因此,各字母所表示的含義爲: Y:2015 y:15 M:july m:07 D:4th d:04
7-4 創建帶有參數的自定義函數
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN(num1+num2)
刪除函數: DROP FUNCTION fun_name;
7-5創建具有複合結構函數體的自定義函數
//創建具有複合結構函數體的自定義函數
修改分隔符:DELEMITER 分隔符
Eg:DELIMITER // /* 將分隔符修改爲 '//' */
- 當函數體內需要執行的是多條語句時,要使用BEGIN...END語句
- 且當編寫函數體內容的時候,需要使用 DELIMITER 關鍵字將分隔符先修改爲別的,否則編寫語句的時候寫到 ';' 的時候會直接執行,導致函數編寫失敗
刪除函數:
DROP FUNCTION [IF EXISTS] function_name
Eg:
DELIMITER //
CREATE FUNCTION ADD_USER(p_id SMALLINT,username VARCHAR(20))
RETURNS INT UNSIGNED
BEGIN
INSERT user(p_id,username) VALUES(p_id,username);
RETURN LAST_INSERT_ID();
END