内表操作

Read internal table

READ TABLE

READ TABLE itab { table_key
                | free_key
                | index } result.

table_key: { FROM wa }
  | { WITH TABLE KEY {comp_name1|(name1)} = dobj1
                     {comp_name2|(name2)} = dobj2

free_key: WITH KEY comp1 = dobj1 comp2 = dobj2 [BINARY SEARCH]

后面不能接OR条件操作符,也不能使用其他非等于的比较操作符

result: { INTO wa [transport_options] } “所取行内容放入wa 工作区

|[COMPARING <f1><f2> ...|ALL FIELDS]“COMPARING:系统根据<k1>...<kn>(关键字段)读取指定的单行与工作区<wa>中的相应组件进行比较。如果系统找根据指定<k1>...<kn>找到了对应的条目,且进行比较的字段内容相同,则将 SY-SUBRC 设置为0,如果进行比较的字段内容不同,则返回值 2;如果系统根据<k1>...<kn>找不到条目,则包含 4。如果系统找到条目,则无论比较结果如何,都将其读入wa中
  | { ASSIGNING <fs> [CASTING] }所取行保存在<fs>字段符号中
  | { REFERENCE INTO dref } 所取行被dref索引
  | { TRANSPORTING NO FIELDS }.系统根据<key>(关键字段)条件查找对应的条目后,只将<result>中指定的组件字段存储到工作区域中。

LOOP AT itab [INTO <wa>]

LOOP AT itab result(与read相同) [cond]. 
ENDLOOP.

Cond:[FROM idx1] [TO idx2] FROM … TO: 只适用于标准表与排序表

[WHERE log_exp]. 适用于所有类型的内表

AT – itab

 

LOOP AT <itab>.

AT FIRST. ... ENDAT.

AT NEW <f1>. ...... ENDAT.

AT NEW <f2>. ...... ENDAT.

<single line processing>

AT END OF <f2>.... ENDAT.

AT END OF <f1>. ... ENDAT.

AT LAST. .... ENDAT.

ENDLOOP.

<line>

含义

FIRST

内表的第一行时触发

LAST

内表的最后一行时触发

NEW <f>

相邻数据行中相同<f>字段构成一组,在循环到该组的开头时触发

END Of <f>

相邻数据行中相同<f>字段构成一组,在循环到该组的最末时触发

 

 

 

 

 

 

 

AT END OF的顺序与AT NEW 是相反

如果在 AT - ENDAT 块中使用 SUM,则系统计算当前行组中所有行的数字字段之和并将其写入工作区域中相应的字段中

Fill internal table

INSERT   INSERT line_spec INTO itab_position [result].


{wa} “单条插入
|{INITIAL LINE}
|{LINES OF jtab [FROM idx1] [TO idx2]}.”批量插入

 

{TABLE itab}
|{itab[INDEX idx]}

 

{ ASSIGNING <fs> [CASTING] }
| { REFERENCE INTO dref }.

l   COLLECT  COLLECT wa INTO itab [result]. 相同关键字段值的行中同名的数字字段的值累计到一条记录上,只有非表关键字段被累加除了表键字段以外的所有字段都必须是数字型(ipf

APPEND   APPEND line_spec TO itab [SORTED BY comp] [result].

MODIFY   MODIFY { itab_line | itab_lines }.

{TABLE itab}|{itab INDEX idx} FROM wa
[TRANSPORTING comp1 comp2 ...] [result]. “只有comp1 comp2 被修改

itab FROM wa TRANSPORTING comp1 comp2 ... WHERE log_exp.

DELETE

{TABLE itab table_key}
  | {itab [INDEX idx]}.

itab [FROM idx1] [TO idx2] [WHERE log_exp]

ADJACENT DUPLICATES FROM itab
[COMPARING { comp1comp2 ...}|{ALL FIELDS}]注,在未使用COMPARING 选项时,要删除重复数据之前,一定要按照内表关键字声明的顺序来进行排序,才能删除重复数据,否则不会删除掉;如果指定了COMPARING 选项,则需要根据指定的比较字段顺序进行排序(如COMPARING <F1><F2>时,则需要sort by <F1><F2>,而不能是sort by <F2><F1>),才能删除所有重复数据   

SORT

SORT itab [STABLE]
          { { [ASCENDING|DESCENDING]
              [AS TEXT]
SET LOCALE LANGUAGE 'E'.根据本地文本环境排序
              [BY {comp1 [ASCENDING|DESCENDING] [AS TEXT]}
                  {comp2 [ASCENDING|DESCENDING] [AS TEXT]}
                  ... ] }
          | { [BY (otab)] } }.

注:APPEND/INSERT…INDEX 操作不能用于Hash表

APPEND/INSERT…INDEX用于排序表时条件:附加/插入时一定要按照Key的升序来附加;如果是Unique排序表,则不能附加/插入重附的数据,

Search internal tables

FIND [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern
  IN TABLE itab [table_range]
  [IN {BYTE|CHARACTER} MODE]
  [{RESPECTING|IGNORING} CASE]
  [MATCH COUNT  mcnt]
匹配次数
  { {[MATCH LINE   mlin]

     [MATCH OFFSET moff]
最后一次匹配的起始位置
     [MATCH LENGTH mlen]}
最后一次匹配的长度
  | [RESULTS result_tab|result_wa] }
  [SUBMATCHES s1 s2 ...].

 

REPLACE [{FIRST OCCURRENCE}|{ALL OCCURRENCES} OF] pattern
        IN TABLE itab [table_range] WITH new
        [IN {BYTE|CHARACTER} MODE]
        [{RESPECTING|IGNORING} CASE]
        [REPLACEMENT COUNT rcnt]
        { {[REPLACEMENT LINE rlin]
           [REPLACEMENT OFFSET roff]
           [REPLACEMENT LENGTH rlen]}
        | [RESULTS result_tab|result_wa] }.

原文地址:https://www.cnblogs.com/xj159/p/11949319.html