07. [SAP ABAP] CASE控制语句

07. SAP ABAP CASE控制语句

在 ABAP 中,CASE 是一种多分支条件控制语句 ,用于根据一个变量或表达式的值执行不同的代码块。它比多个 IF...ELSEIF 更清晰、高效(尤其当判断的是同一个变量的多个可能值时)。

一、基本语法

ABAP 复制代码
CASE <field>.
WHEN <abc>.
   <statement block>.
WHEN <pqr>.
   <statement block>.
...
...
...
WHEN <xyz>.
   <statement block>.
WHEN OTHERS.
   <statement block>.
ENDCASE.
  • : 必须是可比较的数据类型(如字符型、数值型、枚举等),不能是结构体或内表。
  • WHEN 后面可以是一个常量、字面量、常量表达式 ,也可以是多个值(用 OR 连接)。
  • WHEN OTHERS 是可选的,用于处理所有未明确列出的情况(类似于其他语言中的 default)。

二、示例

示例1:简单CASE

ABAP 复制代码
REPORT ZGOYEER001.
DATA: lv_grade TYPE c VALUE 'B'.
CASE lv_grade.
  WHEN 'A'.
    WRITE: / '优秀'.
  WHEN 'B'.
    WRITE: / '良好'.
  WHEN 'C'.
    WRITE: / '及格'.
  WHEN OTHERS.
    WRITE: / '无效成绩'.
ENDCASE.

输出结果:

!外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(https://img-home.csdnimg.cn/images/20230724024159.png?在这里插入图片描述

origin_url=D%3A%5CGoyeerDoc%5C010.SAP%5C04.ABAP%5Cimage%5C07%5C01.png&pos_id=img-eBHX0OHO-1765201457115)

示例2:WHEN多个值

ABAP 复制代码
REPORT ZGOYEER001.
DATA: lv_status TYPE c VALUE 'X'.
CASE lv_status.
  WHEN 'A' OR 'B' OR 'C'.
    WRITE: / '状态正常'.
  WHEN 'X' OR 'Y'.
    WRITE: / '状态异常'.
  WHEN OTHERS.
    WRITE: / '未知状态'.
ENDCASE.

输出结果:

示例3:使用常量

ABAP 复制代码
REPORT ZGOYEER001.
CONSTANTS BEGIN OF c_status.
              active TYPE c VALUE 'A',
              inactive TYPE c VALUE 'I',
          END OF c_status.
DATA: lv_st TYPE c VALUE 'A'.
CASE lv_st.
  WHEN c_status-active.
    WRITE: / '激活'.
  WHEN c_status-inactive.
    WRITE: / '未激活'.
  WHEN OTHERS.
    WRITE: / '状态错误'.
ENDCASE.

输出结果:

!外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(https://img-home.csdnimg.cn/images/20230724024159.png?![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/723469e28cd54c2b9edb87f63730d209.png)

origin_url=D%3A%5CGoyeerDoc%5C010.SAP%5C04.ABAP%5Cimage%5C07%5C03.png&pos_id=img-4nn7aUKp-1765201457117)

三、注意事项

类型一致性

  1. 类型一致性
    CASE 表达式与 WHEN 值的类型必须兼容。ABAP 会尝试自动转换,但不匹配可能导致运行时错误或意外结果。

不能使用比较运算符

字符串比较区分大小写

a 和A被视为不同值
*

WHEN后不能是变量(动态值)

WHEN必须是编译时常量 (literal或constant),不能时普通变量.
*

性能优势

对于大量离散值判断,CASE通常比IF...ELSEIF更高效,因此内部可能使用跳转表(jump table)。

四、注意事项

序号 场景 推荐语句
1 判断同一变量的多个确切值 CASE
2 需要范围判断 (如 > 10) IF
3 条件涉及多个不同变量 IF
4 需要复杂逻辑组合(AND/OR) IF

CASE可以使用嵌套,但是不推荐使用,尽量避免深度嵌套,可封装为子程序或方法提高可读性。

相关推荐
snpgroupcn2 天前
能源行业SAP系统升级的技术约束分析:资产数据连续性与切换窗口的工程处理(上篇)
架构·sap
Harrison Ben5 天前
(原创)SAP FI自动入账奥义:FBKP FBKA FBKF
运维·sap·sap fico·sap运维·sap 实施
xiao贱贱5 天前
SAP ABAP OPEN SQL(应用实战大全)
sap·abap·opensql
爱喝水的鱼丶9 天前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
snpgroupcn10 天前
SAP ECC → S/4HANA 迁移的工程化路径:范围建模、规则复用与短停机窗口切换
sap·sap实施商
yang9822612 天前
S4 CLOUD
sap
爱喝水的鱼丶15 天前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
山茶花开时。19 天前
[SAP ABAP] SAP设置定时执行任务Job
sap·sap abap
SAP_LO19 天前
对检验批次做决策后物料状态并没有改变的处理方法
sap·aq11·bs02·检验批
SAP_奥维奥科技20 天前
云栖大会|奥维奥履约计划智能体获SAP行业AI共创优选方案
sap·云栖大会