功能说明
GBase 8a MPP Cluster 使用CASE 结构处理多路分支的情况。
注意
CASE 计算也依靠上下文。如果是字符串上下文,返回的结果作为一个字
符串,如果是数值上下文,返回结果是数值。
语法格式
语法格式1
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE;
表5- 176 参数说明
参数名称
描
述
Case_value
待匹配值
When_value
匹配值,如果匹配,则相应的statement_list 语句将被执行。
statement_list
要执行的SQL 语句集合,
可以是一个语句也可以是多个语句。
ELSE statement_list
如果前面所有的when_value 都没有匹配,将执行ELSE 子句
中的语句列表。
语法格式2
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE;
表5- 177 参数说明
参数名称
描
述
search_condition
匹配条件,如果为真,相应的statement_list 将被执行。
statement_list
要执行的SQL 语句集合,
可以是一个语句也可以是多个语句。
ELSE statement_list
如果前面所有的search_conditione 都没有匹配,将执行ELSE
子句中的语句列表。
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1357
示例
示例1:CASE 后无Case_value。
gbase> delimiter //
gbase> CREATE PROCEDURE casedemo(in para int,out x varchar(100))
begin
case
when para=1 then set x='true';
when para=0 then set x='false';
else set x='error';
end case;
end //
Query OK, 0 rows affected (Elapsed: 00:00:00.03)
gbase> delimiter ;
gbase> call casedemo(1,@result);
Query OK, 0 rows affected (Elapsed: 00:00:00.03)
gbase> select @result;
+---------+
| @result |
+---------+
| true
|
+---------+
1 row in set (Elapsed: 00:00:00.00)
示例2:CASE 后有Case_value。
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1358
gbase> DELIMITER //
gbase> CREATE PROCEDURE casedemo(in para int,out x varchar(100))
begin
case para
when 1 then set x='true';
when 0 then set x='false';
else set x='error';
end case;
end //
Query OK, 0 rows affected (Elapsed: 00:00:00.08)
gbase> delimiter ;
gbase> call casedemo(1,@result);
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> select @result;
+---------+
| @result |
+---------+
| true
|
+---------+
1 row in set (Elapsed: 00:00:00.00)
gbase> call casedemo(2,@result);
Query OK, 0 rows affected (Elapsed: 00:00:00.03)
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
1359
gbase> select @result;
+---------+
| @result |
+---------+
| error
|
+---------+
1 row in set (Elapsed: 00:00:00.00)