SAP_ABAP_编程基础_内表_创建内表 / 填充内表 / 读取内表 /修改和删除内表行 / 内表排序 / 创建顺序表 / 比较内表 / 初始化内表

SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读470次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/java_zhong1990/article/details/132469977


平时在  ‘ 工地搬砖 ’,很少关注基础技能,闲来无事,拿起来复习一下  ! 

实际在项目中用到的非常之少,所以说学编程,先学框架,在学细节 !,因为细节太多,学不完 !


内表,或者叫内存表,或者说定义在内存里边的表,如果有做过JAVA的朋友们,可以把它理解成是,List ,ArrayList ,


也就是说,如何在内存表中做 CRUD , Abap编程中,有1/5的工作在做内存表的加工。


1 创建内表

TYPES: BEGIN OF <f> OCCURS <n>,
<component declaration>,               
..............
END OF <f>.
DATA: <itab> TYPE STANDARD OF <f>,
<wa> TYPE <f>.

2 填充内表

无关键字附加行:

APPEND [<wa> TO|INITIAL LINE TO] <itab>.

根据标准关键字附加行:

COLLECT [<wa> INTO] <itab>.

如果存在关键字相同的条目,COLLECT 语句不附加新行,
但将工作区域中数字字段的内容添加到现有条目中数字字段的内容中。

插入行:

INSERT [<wa> INTO|INITIAL LINE INTO] <itab> [INDEX <idx>].

附加内表行:

APPEND LINES OF <itab1> [FROM <n1>] [TO <n2>] TO <itab2>.

插入内表行:

INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO <itab2> [INDEX <idx>].

复制内表:

MOVE <itab1> TO <itab2>.

<itab2> = <itab1>.


3 读取内表

逐行读取内表:

LOOP AT <itab> [INTO <wa>] [FROM <n1>] [TO <n2>] [WHERE <condition>].
.....
ENDLOOP.

用索引读取单行:

READ TABLE <itab> [INTO <wa>] INDEX <idx>.

读取自定义关键字的单行:

READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINARY SEARCH].

读取标准关键字的单行:

READ TABLE <itab> [INTO <wa>] [BINARY SEARCH].

二分法搜索:

READ TABLE <itab> .....BINARY SEARCH.

比较单行的内容:

READ TABLE <itab> [INTO <wa>] <key-option> COMPARING <fields>.

读取一行部分列内容:

READ TABLE <itab> [INTO <wa>] <key-option> TRANSPORTING <fields>.

确定内表属性:

DESCRIBE TABLE <itab> [LINES <lin>] [OCCURS <occ>].

如果使用 LINES 参数,则将填充行的数量写入变量<lin>。
如果使用 OCCURS 参数,则将行的初始号写入变量<occ>。

4 修改和删除内表行


用MODIFY更改行:

MODIFY <itab> [FROM <wa>] [INDEX <idx>].

用WRITE TO更改行:

WRITE <f>[+<o1>][(<l1>)] TO <itab>[+<o2>][(<l2>)] INDEX <idx>.

在循环中删除行:

DELETE <itab>.

用索引删除行:

DELETE <itab> INDEX <idx>.

删除邻近的重复条目:

DELETE ADJACENT DUPLICATE ENTRIES FROM <itab> [COMPARING <comp>].

删除选定行:

DELETE <itab> [FROM <n1>] [TO <n2>] [WHERE <condition>].


5 内表排序

SORT <itab> [<order>] [AS TEXT]
[BY <f1> [<order>] [AS TEXT] ... <fn> [<order>] [AS TEXT]].


6 创建顺序表

APPEND [<wa> TO] <itab> SORTED BY <f>.

AT <line>.
<statement block>
ENDAT.

<line>  FIRST
内表的第一行

<line> LAST
内表的最后一行

<line> NEW <f>
行组的开头,与字段<f>和<f>剩余字段中的内容相同

<line> END Of <f>
行组的结尾,与字段<f>和<f>剩余字段中的内容相同


7 初始化内表

REFRESH <itab>.  将内表重置为填充它以前的状态

CLEAR <itab>.如果使用没有表格工作区域的内表,可以使用 CLEAR 语句代替 REFRESH 语句

CLEAR <itab>[].要重置整个内表而不清除表格工作区域,内表名称之后的方括号指内表体。

FREE <itab>. 使用 REFRESH 或 CLEAR 初始化内表后,系统保持在内存中保留的空间。
可以用 FREE 语句释放内存。(在做性能优化的时候 ,用 FREE 掉内存 )

... <itab> IS INITIAL ... 检查内表是否为空


8 比较内表

可以将内表用做逻辑表达式的操作数:
.... <itab1><operator><itab2> ...

猜你喜欢

转载自blog.csdn.net/java_zhong1990/article/details/134707926