暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8s 存储过程解析之CASE

原创 Todd 2022-03-23
506

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计算也依靠上下文。如果是字符串上下文,返回的结果作为一个字符串,如果是数值上下文,返回结果是小数,实数或整数。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论