自定義函數(shù)

自定義函數(shù)

自定義函數(shù)包含兩個條件:參數(shù)、返回值(必須包含返回值)
1、創(chuàng)建函數(shù)
語法:

CREATE [OR REPLACE] FUNCTION 函數(shù)名([參數(shù)類型 參數(shù)名])
RETURNS
返回值類型
函數(shù)體

函數(shù)體:函數(shù)體由合法的sql語句組成;函數(shù)體可以是簡單的select或insert語句;函數(shù)體如果為復(fù)合結(jié)構(gòu)則使用begin.....end語句;復(fù)合結(jié)構(gòu)可以包含聲明,循環(huán),控制語句。
舉例:
(1)無參函數(shù)

create function f1()
returns varchar(30)
return date_format(now(),'%Y年%m月%d日%H時%i分%s秒');

(2)帶參函數(shù)

create function f2(num1 smallint UNSIGNED, num2 smallint UNSIGNED)
returns float(10,2)
return (num1+num2)/2;

!注:UNSIGNED是將數(shù)字類型無符號化(非負(fù)數(shù))
(3)復(fù)合函數(shù)

delimiter $$
create function f3(num1 smallint UNSIGNED, num2 smallint UNSIGNED)
returns float(10,2)
begin
    declare sum float default 0;
    set sum = num1+num2;
    return sum; 
end
$$

!注:DELIMITER用來定義mysql分界符,默認(rèn)為分號;
(4)帶sql語句的復(fù)合函數(shù)

delimiter $$
create function f6(cateint(2))
returns decimal(10,2)
begin
    declare total decimal default 0;
    select sum(price) into total from product where category=cate;
    return total;
end
$$

2、調(diào)用函數(shù)
語法:SELECT 函數(shù)名(參數(shù)名)
3、刪除函數(shù)
DROP FUNCTION 函數(shù)名

聲明變量

1、局部變量:局部變量一般用DECLARE來聲明,可以使用DEFAULT來說明默認(rèn)值(初始值)。
語法:DECLARE 變量名 變量類型 DEFAULT 初始值
2、變量賦值
(1)直接賦值
語法:SET 變量名= 值
(2)將查詢結(jié)果賦值給變量
語法:SELECT ··· INTO 變量名 FROM 表名 WHERE ···
舉例: SELECT sum(price) INTO num FROM product WHERE category=1

循環(huán)語句

1、WHILE循環(huán)語句,語法:

[標(biāo)簽:] WHILE 循環(huán)條件 DO
循環(huán)體;
END WHILE [標(biāo)簽];

2、REPEAT循環(huán)語句,語法:

[repeat_name:] REPEAT 
循環(huán)體;
UNTIL  循環(huán)條件#若成立則跳出循環(huán)
END REPEAT [repeat_name];

3、LOOP循環(huán)語句,語法:

[loop_name:] LOOP
循環(huán)體;#利用控制流語句,如if語句控制結(jié)束條件(結(jié)束語句leave loop_name;)
END LOOP;

控制語句

1、IF控制流語句,語法:

IF 條件1 THEN 動作1;
ELSEIF 條件2 THEN 動作2;
···
ELSE 動作n;
END IF;

2、CASE控制流語句,語法:

CASE 變量
    WHEN 值1 THEN 動作1;
    WHEN 值2 THEN 動作2;
    ···
    ELSE 動作n;
END CASE;

循環(huán)控制的函數(shù)案例

delimiter $$
create function f5()
returns int(5)
begin
    declare total int default 0;
    declare num int default 1;
    num : loop
        If num<=50 then
            set total = total + num;
            set num = num+1;
        else leave num;
        end if;
    end loop;
    return total;
end
$$
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容