自定义函数

自定义函数

自定义函数包含两个条件:参数、返回值(必须包含返回值)
1、创建函数
语法:

CREATE [OR REPLACE] FUNCTION 函数名([参数类型 参数名])
RETURNS
返回值类型
函数体

函数体:函数体由合法的sql语句组成;函数体可以是简单的select或insert语句;函数体如果为复合结构则使用begin.....end语句;复合结构可以包含声明,循环,控制语句。
举例:
(1)无参函数

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

(2)带参函数

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

!注:UNSIGNED是将数字类型无符号化(非负数)
(3)复合函数

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分界符,默认为分号;
(4)带sql语句的复合函数

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、调用函数
语法:SELECT 函数名(参数名)
3、删除函数
DROP FUNCTION 函数名

声明变量

1、局部变量:局部变量一般用DECLARE来声明,可以使用DEFAULT来说明默认值(初始值)。
语法:DECLARE 变量名 变量类型 DEFAULT 初始值
2、变量赋值
(1)直接赋值
语法:SET 变量名= 值
(2)将查询结果赋值给变量
语法:SELECT ··· INTO 变量名 FROM 表名 WHERE ···
举例: SELECT sum(price) INTO num FROM product WHERE category=1

循环语句

1、WHILE循环语句,语法:

[标签:] WHILE 循环条件 DO
循环体;
END WHILE [标签];

2、REPEAT循环语句,语法:

[repeat_name:] REPEAT 
循环体;
UNTIL  循环条件#若成立则跳出循环
END REPEAT [repeat_name];

3、LOOP循环语句,语法:

[loop_name:] LOOP
循环体;#利用控制流语句,如if语句控制结束条件(结束语句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;

循环控制的函数案例

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
$$

你可能感兴趣的:(自定义函数)