GBase 8s 分布式使用CASE结构处理多路分支的情况,其语法格式有两种,分别描述如下:
CASE
WHEN <条件1> THEN <执行语句1>
WHEN <条件2> THEN <执行语句2>
...
ELSE <执行语句X>
END CASE;
当<条件1>为真值时,<执行语句1>;当<条件2>为真值时,<执行语句2>;如果没有匹配的结果值,那么返回ELSE后的<执行语句X>。
CASE <判定条件>
WHEN <值1> THEN <执行语句1>
WHEN <值2> THEN <执行语句2>
...
ELSE <执行语句X>
END CASE;
计算<判定条件>,如果<判定条件>的值等于<值1>,<执行语句1>;如果<判定条件>的值等于<值2>,<执行语句2>;如果没有相匹配的值则执行<执行语句X>。
示例1:CASE后无判定条件。
gbase> DELIMITER //
gbase> DROP PROCEDURE IF EXISTS casedemo//
Query OK, 0 rows affected
gbase> CREATE PROCEDURE casedemo()
-> BEGIN
-> SELECT DISTINCT CASE WHEN c_nation='CHINA' THEN '中国' WHEN c_nation='MOROCCO' THEN '摩洛哥' WHEN c_nation='JORDAN' THEN '约旦' ELSE '其它国家' END 中文,c_nation FROM ssbm.customer LIMIT 10;
END //
Query OK, 0 rows affected
gbase> DELIMITER ;
gbase> CALL casedemo();
+-------------------+
| 中文,c_nation |
+-------------------+
| 中国 |
| 摩洛哥 |
| 约旦 |
| 其它国家 |
+-------------------+
4 rows in set
Query OK, 0 rows affected
示例2:CASE后有判定条件。
gbase> DELIMITER //
gbase> DROP PROCEDURE IF EXISTS casedemo2//
Query OK, 0 rows affected
gbase> CREATE PROCEDURE casedemo2()
BEGIN
SELECT DISTINCT CASE c_nation WHEN 'CHINA' THEN '中国' WHEN 'MOROCCO' THEN '摩洛哥' WHEN 'JORDAN' THEN '约旦' ELSE '其它国家' END 中文,c_nation FROM ssbm.customer LIMIT 10;
END //
Query OK, 0 rows affected
gbase> DELIMITER ;
gbase> CALL casedemo2();
+-------------------+
| 中文,c_nation |
+-------------------+
| 中国 |
| 摩洛哥 |
| 约旦 |
| 其它国家 |
+-------------------+
4 rows in set
Query OK, 0 rows affected
注意:CASE计算也依靠上下文。如果是字符串上下文,返回的结果作为一个字符串,如果是数值上下文,返回结果是小数,实数或整数。




