ABAP 基础练习
ABAP 基础练习 (10题)
#practice #abap-basics #program-structure #data-types #open-sql
相关概念
📌核心模式(点击查看)
| 关键词 | 答案 |
|---|---|
| 每种类型的引导语句 | REPORT/FUNCTION-POOL/PROGRAM/CLASS-POOL |
| 完整 vs 不完整类型 | 完整:i,f,d,t,string,xstring;不完整:p,n,c,x |
| 平坦 vs 深层 | 平坦=静态长度;深层=引用(string,内表,引用) |
| SELECT 变体 | SINGLE、ENDSELECT 循环、INTO TABLE(数组) |
第1题 - 程序引导语句 [记忆]
可执行程序的引导语句是什么?
📌点击查看答案
REPORT name ... [MESSAGE-ID id]。MESSAGE-ID 附加项是可选的,用于指定标准消息类。第2题 - 处理块 [记忆]
说出 ABAP 程序中三种处理块的类型。
📌点击查看答案
- ABAP 事件块(由事件关键字引入,由运行时环境调用)
- 对话模块(MODULE…ENDMODULE,由屏幕流逻辑调用)
- 过程(FORM…ENDFORM, FUNCTION…ENDFUNCTION, 方法 – 显式调用)
第3题 - 程序类型限制 [记忆]
哪些程序类型不能包含任何处理块?
📌点击查看答案
接口池 和 类型池 – 它们严格用于声明,仅包含类型和常量定义。
第4题 - Include 程序 [记忆]
ABAP include 程序有哪些规则?(至少说出三条)
📌点击查看答案
- 不能有引导语句
- 不能由编译器独立生成
- 必须包含完整语句
- 可以包含其他 include 但不能包含自身(不允许递归)
- 不需要包含完整的处理块
- 推荐命名:
<main>_F01、<main>_O01、<main>_I01等
第5题 - 数据类型分类 [记忆]
将每个 ABAP 预定义类型分类为完整或不完整:
i、p、c、f、n、string、x、d、t、xstring。
📌点击查看答案
| 类型 | 分类 | 说明 |
|---|---|---|
i |
完整 | 固定长度 |
p |
不完整 | 需要 LENGTH + DECIMALS |
c |
不完整 | 需要 LENGTH |
f |
完整 | 固定长度 |
n |
不完整 | 需要 LENGTH |
string |
完整 | 可变长度 |
x |
不完整 | 需要 LENGTH |
d |
完整 | 固定 8 字符 |
t |
完整 | 固定 6 字符 |
xstring |
完整 | 可变长度 |
第6题 - 泛型 [记忆]
ABAP 泛型的用途是什么?可以用它们声明数据对象吗?
📌点击查看答案
泛型仅用于为形式参数和字段符号指定类型。不能用于声明数据对象,因为它们不能完全定义数据对象的属性(如长度)。
第7题 - 平坦 vs 深层 [应用]
有一个结构包含以下组件:
id TYPE i、name TYPE string、amount TYPE p LENGTH 8 DECIMALS 2。这个结构是平坦的还是深层的?为什么?
📌点击查看答案
该结构是深层的,因为它包含至少一个深层组件(
name TYPE string)。虽然 i 和 p 是平坦的,但如果任何组件(在任何嵌套层级)是深层的(string、内表或引用),则整个结构被归类为深层。第8题 - SELECT 变体 [应用]
需要将某航空公司的所有航班读取到内表中。应使用哪种 SELECT 变体?为什么?
📌点击查看答案
使用
SELECT ... INTO TABLE itab(数组读取)。这样一次操作就能将所有记录传输到内表。它比 SELECT ... ENDSELECT(顺序读取)更高效,因为它避免了循环开销并最小化了数据库交互。操作后始终检查 sy-subrc 以验证是否找到数据。第9题 - 可见性与生命周期 [分析]
一个数据对象在方法实现中用 DATA 声明。比较它与同一程序全局声明部分中声明的数据对象的可见性和生命周期。
📌点击查看答案
| 方面 | 方法局部 DATA | 全局 DATA |
|---|---|---|
| 可见性 | 仅在方法内部 | 整个程序组 |
| 生命周期 | 方法调用时创建,方法退出时释放 | 内部会话持续期间一直存在 |
| 内存 | 每次调用的栈/堆 | 滚动区(静态) |
方法局部变量支持封装和可重入性 – 每次方法调用都有自己的变量实例。
第10题 - Open SQL 错误处理 [应用]
执行
SELECT SINGLE * FROM sflight INTO ls_flight WHERE carrid = 'LH'后,如果未找到记录,sy-subrc的值是什么?应如何处理?
📌点击查看答案
sy-subrc = 4 表示未找到记录(8 表示 SELECT SINGLE 的记录过多不可能出现,但使用 UP TO 2 ROWS 时可能出现)。始终立即检查:
1 | SELECT SINGLE * FROM sflight INTO ls_flight WHERE carrid = 'LH'. |
📌模式总结(点击查看)
| 关键词 | 答案 |
|---|---|
| 可执行程序引导语句 | REPORT |
| 无处理块 | 接口池、类型池 |
| 完整类型 | i, f, d, t, string, xstring, decfloat16/34 |
| 不完整类型 | p, n, c, x(需要 LENGTH) |
| 深层数据对象 | string, xstring, 内表, 引用 |
| 数组读取 | SELECT ... INTO TABLE |
| sy-subrc = 0 | 找到记录 |
| sy-subrc = 4 | 未找到记录 |