BC402 快速参考
#dashboard
| 程序类型 |
引导语句 |
处理块 |
| 可执行程序 |
REPORT name ... [MESSAGE-ID id] |
事件块、对话模块、过程 |
| 函数组 |
FUNCTION-POOL name ... |
仅 LOAD-OF-PROGRAM、函数模块、事件块 |
| 模块池 |
PROGRAM name ... |
事件块、对话模块、过程 |
| 类池 |
CLASS-POOL |
仅方法 |
| 接口池 |
INTERFACE-POOL |
无(纯声明) |
| 类型池 |
TYPE-POOL name |
无(纯声明) |
| 分类 |
类型 |
长度 |
说明 |
| 完整数值型 |
i, f, decfloat16, decfloat34 |
固定 |
无需 LENGTH |
| 不完整数值型 |
p |
可变 |
需要 LENGTH + DECIMALS |
| 完整字符型 |
d, t, string |
固定/可变 |
日期=8,时间=6 |
| 不完整字符型 |
c, n |
可变 |
需要 LENGTH |
| 完整字节型 |
xstring |
可变 |
— |
| 不完整字节型 |
x |
可变 |
需要 LENGTH |
泛型类型:any、any table、c、data、decfloat、index table、n、numeric、object、simple、sorted table、standard table、table、x、csequence、clike、xsequence
| 条件 |
使用的算术类型 |
含 decfloat16/decfloat34 操作数或结果 |
十进制浮点 |
含 f 操作数或结果(无 decfloat) |
二进制浮点 |
含 p 操作数或结果(无 f、无 decfloat) |
定点(压缩) |
全部为 i 操作数且结果为 i |
整数 |
注意:** 运算符即使所有操作数都是 i 也会触发浮点运算。
| 语句 |
行为 |
内存效果 |
SUBMIT prog AND RETURN |
插入(暂停调用者) |
新内部会话入栈 |
SUBMIT prog(无 AND RETURN) |
替换栈顶会话 |
栈顶会话被替换 |
CALL TRANSACTION 'TCODE' |
插入 |
新内部会话入栈 |
LEAVE TO TRANSACTION 'TCODE' |
重新启动 |
整个栈被销毁 |
| 区域 |
范围 |
生命周期 |
| 滚动区 |
每个内部会话 |
会话期间 |
| PXA |
每个应用服务器 |
服务器生命周期(共享) |
| ABAP 内存 |
每个外部会话 |
直到会话关闭 |
| SAP 内存 |
每个用户会话 |
终端会话期间 |
| 共享对象 |
每个应用服务器 |
直到显式删除 |
| 类型 |
键访问 |
索引访问 |
适用场景 |
| STANDARD(标准表) |
线性 O(n) |
是 |
顺序处理、排序 |
| SORTED(排序表) |
二分 O(log n) |
是 |
部分顺序读取 |
| HASHED(哈希表) |
哈希 O(1) |
否 |
按键单条查找 |
描述型:strlen()、xstrlen()、numofchar()、find()、count()、contains()、matches()
处理型:substring()、to_upper()、to_lower()、concat_lines_of()、reverse()、repeat()、shift_left()、shift_right()
模板:|文本 {表达式 选项} 文本| — 使用 && 连接
| 技术 |
语句/类 |
| 动态令牌(字面量) |
数据对象直接用于语句中 |
| 动态令牌(标识符) |
数据对象放在括号中 (field) |
| 动态 SQL |
SELECT ... FROM (tab) WHERE (cond) |
| 动态函数调用 |
CALL FUNCTION fm_name |
| 动态方法调用 |
CALL METHOD (meth) ... PARAMETER-TABLE |
| 程序生成 |
INSERT REPORT name FROM itab |
| 运行时创建数据 |
CREATE DATA ref TYPE (typename) |
| 运行时创建对象 |
CREATE OBJECT ref TYPE (classname) |
1 2 3 4 5 6 7 8 9 10
| CL_ABAP_TYPEDESCR(根类) ├── CL_ABAP_DATADESCR │ ├── CL_ABAP_ELEMDESCR │ ├── CL_ABAP_REFDESCR │ ├── CL_ABAP_STRUCTDESCR │ ├── CL_ABAP_TABLEDESCR │ └── CL_ABAP_ENUMDESCR └── CL_ABAP_OBJECTDESCR ├── CL_ABAP_CLASSDESCR └── CL_ABAP_INTFDESCR
|
关键方法:describe_by_name()、describe_by_data()、get_ddic_field_list()、get_components()
| 函数 |
含义 |
COUNT(*) |
计算所有行数 |
COUNT(DISTINCT col) |
计算不同值的数量 |
SUM(col)、AVG(col) |
求和 / 平均 |
MAX(col)、MIN(col) |
最大值 / 最小值 |
GROUP BY col |
分组结果 |
HAVING cond |
过滤分组 |
ORDER BY col |
排序结果 |
| 类型 |
语法 |
行为 |
| INNER JOIN |
FROM a INNER JOIN b ON a~k = b~k |
仅匹配的行 |
| LEFT OUTER JOIN |
FROM a LEFT OUTER JOIN b ON a~k = b~k |
左表所有行 + 匹配 |
| 子查询 |
WHERE col IN (SELECT ...) |
嵌套 SELECT |
| FOR ALL ENTRIES |
FOR ALL ENTRIES IN itab WHERE ... |
与内表连接 |
FOR ALL ENTRIES 陷阱:务必先检查 itab IS NOT INITIAL!
| 类型 |
语句 |
激活时效果 |
| 断点 |
BREAK-POINT [ID grp] |
启动调试器 |
| 断言 |
ASSERT [ID grp] cond |
条件为假时产生转储 |
| 日志点 |
LOG-POINT ID grp |
记录到检查点组日志 |
检查点组状态:非活动 / 中断 / 日志 / 终止(仅断言)
- 单条记录访问使用排序表/哈希表(而非标准表+线性搜索)
- LOOP 中使用
ASSIGNING <fs> 或 REFERENCE INTO dref 避免数据复制
- 避免使用
SELECT * — 明确指定所需列
- 大数据量使用
PACKAGE SIZE 或 INTO TABLE
- 每次数据库操作后检查
sy-subrc
- 仅在驱动表小且非空时使用
FOR ALL ENTRIES
- 避免在循环中使用
SELECT — 使用 JOIN 或预缓冲替代