栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

存储过程(3)流程控制语句的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

存储过程(3)流程控制语句的使用

一.流程控制-判断
1.条件判断语句if

– 语法:
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] …
[ELSE statement_list]
END IF

eg:计算员工工龄,并根据工龄获取称谓。

-- 计算员工工龄
DELIMITER $$

USE stores$$

DROP PROCEDURE IF EXISTS hiretime$$

CREATE PROCEDURE hiretime(IN employeer_no DATE)
BEGIN
	
	DECLARE result VARCHAR(32);
	IF TIMESTAMPDIFF(YEAR,employeer_no,NOW())>40
		THEN SET result='元老';
	ELSEIF TIMESTAMPDIFF(YEAR,employeer_no,NOW())>38
		THEN SET result='老员工';
	ELSE
		SET result='新手';
	END IF;
	
	SELECT result;
	SELECT TIMESTAMPDIFF(YEAR,employeer_no,NOW());
END$$

DELIMITER ;

CALL hiretime('1981-09-28');

2.条件判断语句case

– 语法:
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] …
[ELSE statement_list]
END CASE
– 语法二:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] …
[ELSE statement_list]
END CASE

eg: 根据成绩评定等级。
语法一:

-- 语法一

DELIMITER $$

USE stores$$

DROP PROCEDURE IF EXISTS ps_hire_case$$

CREATE PROCEDURE ps_hire_case(IN score INT)
BEGIN
	DECLARE result VARCHAR(24);
	CASE score
		WHEN 90
		THEN SET result='高级';
		WHEN 80
		THEN SET result='中高级';
		WHEN 70
		THEN SET result='中级';
		WHEN 60
		THEN SET result='低中级';
		WHEN 40
		THEN SET result='低级';
		ELSE SET result='普通人';
	END CASE;
	
	SELECT result;
END $$

DELIMITER ;

CALL ps_hire_case(90);

语法二:

-- 语法二
DELIMITER $$

USE stores $$

DROP PROCEDURE IF EXISTS ps_hire_case$$

CREATE PROCEDURE ps_hire_case(IN score INT)
BEGIN
	DECLARE result VARCHAR(32);
	CASE
		WHEN score>90
		THEN SET result='高分';
		WHEN score >80
		THEN SET result='合格';
		WHEN score>60
		THEN SET result='及格';
		WHEN score>40
		THEN SET result='不及格';
		ELSE SET result='差';
	END CASE;
	
	SELECT result;
END$$

DELIMITER ;

CALL ps_hire_case(50);

二.流程控制-循环
循环语句loop

– 语法
[begin_label:] LOOP
statement_list
END LOOP [end_label]

说明

需要说明,loop是死循环,需要手动退出循环,我们可以使用leave来退出。
可以把leave看成我们java中的break;与之对应的,就有iterate(继续循环)——类比java的continue

ag:

--需求:循环打印1到10
-- leave控制循环的退出
delimiter $$
create procedure sp_flow_loop()
begin
    declare c_index int default 1;
    declare result_str  varchar(256) default '1';
    cnt:loop

        if c_index >= 10
        then leave cnt;
        end if;

        set c_index = c_index + 1;
        set result_str = concat(result_str,',',c_index);

    end loop cnt;

    select result_str;
end$$

-- iterate + leave控制循环
delimiter $$
create procedure sp_flow_loop02()
begin
    declare c_index int default 1;
    declare result_str  varchar(256) default '1';
    cnt:loop

        set c_index = c_index + 1;
        set result_str = concat(result_str,',',c_index);
        if c_index < 10 then 
            iterate cnt; 
        end if;
        -- 下面这句话能否执行到?什么时候执行到? 当c_index < 10为false时执行
        leave cnt;

    end loop cnt;
    select result_str;

end$$
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274063.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号