考试陷阱

考试陷阱

#dashboard #exam-traps

⚠️本笔记目的
BC402 高级ABAP 课程中常见的易错点和考试陷阱集锦。

算术与数据类型

陷阱:** 运算符导致整数除法变化
int = ( 1 / 4 ) * ( 2 * 2 )0(整数算术取整)
int = ( 1 / 4 ) * ( 2 ** 2 )1** 触发二进制浮点运算!)
** 运算符即使所有操作数都是 i 类型也会强制使用二进制浮点运算。
算术表达式
陷阱:大数字字面量超出类型 i 范围
10000000000 超出类型 i 范围,因此变为类型 p,改变了算术类型。
int = 1000000000 / 300000000 * 39(整数算术)
int = 10000000000 / 3000000000 * 310(压缩算术)
算术表达式
陷阱:定点算术程序属性
如果未设置程序属性”定点算术”(Fixed Point Arithmetic),类型 p 的计算将忽略小数位。结果看起来不正确,因为小数点仅在输入/输出时考虑。
算术表达式

程序调用与内存

陷阱:LEAVE TO TRANSACTION 销毁 ABAP 内存
CALL TRANSACTION(插入模式)不同,LEAVE TO TRANSACTION 会销毁整个内部会话栈,同时清除 ABAP 内存
程序调用
陷阱:函数组在不同内部会话中分别加载
如果两个内部会话调用同一函数组的函数模块,每个会话获得独立的全局数据副本。无法跨会话共享数据。
运行时与内存管理
陷阱:外部子程序调用共享程序组
外部 PERFORM 将子程序的程序加载到同一程序组中,共享接口工作区。这可能导致非预期的数据耦合。
运行时与内存管理

内表

陷阱:标准表使用 BINARY SEARCH 需先排序
READ TABLE ... BINARY SEARCH 仅在表按键字段排序后才能正确工作。否则结果不可预测——不会报错。
特殊表技术
陷阱:DELETE ADJACENT DUPLICATES 需要已排序的表
仅删除相邻的重复行。必须先排序,使用 COMPARING 指定比较字段。
特殊表技术
陷阱:COLLECT 仅适用于扁平行类型
COLLECT 对数值字段求和,将所有非数值字段作为键进行比较。深层行类型会导致运行时错误。
特殊表技术
陷阱:哈希表不支持索引访问
不能对哈希表使用 READ TABLE ... INDEXLOOP AT ... FROM/TOINSERT ... INDEXDELETE ... INDEX
内表类型

动态编程

陷阱:动态标识符需要括号,不能有空格
CALL FUNCTION (lv_name) — 正确。CALL FUNCTION ( lv_name ) — 错误。动态令牌的括号内不允许有空格。
动态编程技术
陷阱:泛型数据引用必须使用 ASSIGN 解引用
TYPE REF TO DATA 变量不能用 ->* 直接解引用。必须使用 ASSIGN dref->* TO <fs>
泛型类型与动态访问
陷阱:RTTC 不能生成类或接口
RTTC 仅限于数据类型。不能动态创建类或接口类型。
运行时类型创建

Open SQL

陷阱:FOR ALL ENTRIES 空驱动表
如果驱动表为空,FOR ALL ENTRIES 会读取整个数据库表——没有 WHERE 限制。务必先检查 itab IS NOT INITIAL
SQL 多表访问
陷阱:JOIN 绕过表缓冲
Open SQL JOIN 不使用 SAP 表缓冲。即使表已配置缓冲也会被忽略。对缓冲表应使用单表访问。
数据库接口与缓冲
陷阱:DISTINCT 与聚合函数
SELECT COUNT( DISTINCT col ) 计算不同值的数量。SELECT DISTINCT col COUNT(*) 无效。DISTINCT 作用于结果集,而非聚合中的个别列。
SQL 聚合与处理
陷阱:外连接——右侧只允许一个表
LEFT OUTER JOIN 右侧只能有一个表。不能在右侧外连接到视图或另一个连接。
SQL 多表访问

检查点与测试

陷阱:静态断点留在生产系统
不带 IDBREAK-POINT 始终激活。传输到生产系统前必须移除。改用 BREAK-POINT ID group
检查点与断言
陷阱:LOG-POINT 必须指定检查点组
LOG-POINT 必须始终带有 ID group。与断点不同,日志点不能在没有检查点组的情况下使用。
检查点与断言

性能

陷阱:循环中的 SELECT *
最常见的性能杀手。始终用 JOIN、FOR ALL ENTRIES 或预缓冲到内表来替代。
数据库性能
陷阱:标准表线性搜索处理大数据集
| 不带 BINARY SEARCHREAD TABLE 对标准表是 O(n)。按键访问应使用排序表或哈希表。
ABAP 性能

相关链接

  • [[_posts/SAP_ABAP/BC402_ABAP高阶技巧/00-仪表盘/学习地图]] → 薄弱环节部分
  • [[_posts/SAP_ABAP/BC402_ABAP高阶技巧/00-仪表盘/快速参考]]