自定义函数
自定义函数包含两个条件:参数、返回值(必须包含返回值)
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
$$