存储程序--存储函数

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服务器在执行语句的时候会忽略掉这些注释语句。

上一篇下一篇

猜你喜欢

热点阅读