存储程序--存储函数
2019-09-29 本文已影响0人
wpf_register
原文链接-定义变量
原文链接-存储函数
原文链接-存储过程
原文链接-游标简介
原文链接-触发器和事件简介
存储例程是存储程序的一种,本质上也是封装了一些可执行的语句,只不过它的调用的方式是需要手动调用的。
存储函数
创建
存储函数是一种函数,在函数中可以执行命令语句。
MySQL中存储函数的定义语句如下:
Create Function 存储函数名称([参数列表])
Returns 返回值类型
Begin
函数体内容
End
定义一个根据部门求工资总和的函数
delimiter &
Create Function sum_salary( deptID int)
Returns Double
BEGIN
RETURN (SELECT SUM(salary) FROM employee WHERE dept_id = deptID);
END &
delimiter ;
调用
SELECT sum_salary(1);
查看/删除
Show Create Function函数名
Drop Function 函数名
在函数体中定义变量
在命令行中可以不用声明就给变量赋值(即SET语句声明),但在函数体中使用变量必须先声明变量
Declare 变量名 数据类型 [default 默认值]
//特别注意,函数体中变量不允许加@ 前缀,先声明,再使用。
delimiter $;
CREATE FUNCTION var_demo()
RETURNS INT
BEGIN
DECLARE c INT;
SET c = 5;
RETURN c;
END $
delimiter ;
//也可以声明默认值
delimiter $
CREATE FUNCTION var_default_demo()
RETURNS INT
BEGIN
DECLARE c INT DEFAULT 1;
RETURN c;
END $
delimiter ;
//一般将查询结果赋值
CREATE FUNCTION avg_score(s VARCHAR(100))
RETURNS DOUBLE
BEGIN
DECLARE a DOUBLE;
SET a = (SELECT AVG(score) FROM student_score WHERE subject = s);
return a;
END
注意:
- 参数名不要和函数体语句中其他的变量名、命令语句的标识符冲突。
- 函数参数不可以指定默认值,我们在调用函数的时候,必须显式的指定所有的参数,并且参数类型也一定要匹配
IF 语句
IF 布尔表达式 THEN
处理语句
[ELSEIF 布尔表达式 THEN
处理语句]
[ELSE
处理语句]
END IF;
示例
delimiter $
CREATE FUNCTION condition_demo(i INT)
RETURNS VARCHAR(10)
BEGIN
DECLARE result VARCHAR(10);
IF i = 1 THEN
SET result = '结果是1';
ELSEIF i = 2 THEN
SET result = '结果是2';
ELSEIF i = 3 THEN
SET result = '结果是3';
ELSE
SET result = '非法参数';
END IF;
RETURN result;
END $
delimiter ;
循环语句
WHILE 布尔表达式 DO
循环语句
END WHILE;
REPEAT
循环语句
UNTIL 布尔表达式 END REPEAT;
循环标记:LOOP
循环语句
LEAVE 循环标记;
END LOOP 循环标记;
CREATE FUNCTION sum_all(n INT UNSIGNED)
RETURNS INT
BEGIN
DECLARE result INT DEFAULT 0;
DECLARE i INT DEFAULT 1;
WHILE i <= n DO
SET result = result + i;
SET i = i + 1;
END WHILE;
RETURN result;
END
CREATE FUNCTION sum_all(n INT UNSIGNED)
RETURNS INT
BEGIN
DECLARE result INT DEFAULT 0;
DECLARE i INT DEFAULT 1;
REPEAT
SET result = result + i;
SET i = i + 1;
UNTIL i <= n END REPEAT;
RETURN result;
END
CREATE FUNCTION sum_all(n INT UNSIGNED)
RETURNS INT
BEGIN
DECLARE result INT DEFAULT 0;
DECLARE i INT DEFAULT 1;
flag:LOOP
IF i > n THEN
LEAVE flag;
END IF;
SET result = result + i;
SET i = i + 1;
END LOOP flag;
RETURN result;
END
注释
在函数体内以--开头的语句都算作注释语句,MySQL服务器在执行语句的时候会忽略掉这些注释语句。