【转】内表的操作

2024-01-01 21:49
文章标签 操作 内表

本文主要是介绍【转】内表的操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从百度文库里看到这篇文章,转到自己空间,以备留作查看;作者名字不详,总结的非常好,在此感谢。

【转】 内表

一.

1.在ABAP/4 中,主要使用表格。表格是R/3 系统中的关 键数据结构 。长期使用的数据存储在关系数据库表格中。

2.除了数据库表格,还可以创建仅在程序运行时间内存在的内表

内表是按行三进行访问的 。必须使用某个工作区或者表头行作为与表格互相传输数据的中转站。

3.三种内表

    标准内表(standard table)

    排序内表 (sorted table) 可以用二分查找法提高效率

    哈希内表 (hashed table) 数据量相当大时考虑用这种内表

4.两种定义形式:type and like

TYEPS只是定义出一个结构体的类型,它不能存储数据(即它不是工作区)。

DATA定义出了一个结构体,它可以存储一行数据(即一个工作区)。

两种关键字不能混用。

1.

TYPES: BEGIN OF TY_OUTLIST,

         USER       LIKE  AGR_USERS-UNAME,         "用户名

         NAME       LIKE  ADRP-NAME2,              "用户姓名

         DEPART     LIKE  ADCP-DEPARTMENT,         "部门

         ROLENAME   LIKE  AGR_USERS-AGR_NAME,      "用户角色

         ROLETEXT   LIKE  AGR_TEXTS-TEXT,          "角色描述

       END OF TY_OUTLIST.

DATA: T_OUTLIST TYPE STANDARD TABLE OF TY_OUTLIST WITH HEADER LINE.

     2.

     DATA: BEGIN OF TY_OUTLIST,

         USER       LIKE  AGR_USERS-UNAME,         "用户名

         NAME       LIKE  ADRP-NAME2,              "用户姓名

         DEPART     LIKE  ADCP-DEPARTMENT,         "部门

         ROLENAME   LIKE  AGR_USERS-AGR_NAME,      "用户角色

         ROLETEXT   LIKE  AGR_TEXTS-TEXT,          "角色描述

       END OF TY_OUTLIST.

DATA: T_OUTLIST LIKE STANDARD TABLE OF TY_OUTLIST WITH HEADER LINE.

 

 

3.《SAP程序设计》中的错误的定义方法。P126

TYPES: BEGIN OF ITAB OCCURS N,

       V1 TYPE I,

       V2 TYPE I,

       END OF ITAB.

 

工作区(work area):

程序对内表的操作不能直接进行,必须通过一种接口来传输,这个接口就是工作区(work area)

                      内表

Field1

Field2

Field3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  工作区

 

 

 

从关系数据库中读取数据到内表各行中,必须先将数据读到工作区,然后在将工作区中的数据赋给内表的行。

从内表读取数据时,需要用已定位的内表行内容覆盖工作区的内容,然后在从程序中读取工作区的内容。 

所以工作区必须具有和内表的行一致或者可以相互转换的数据结构(一般是与内表类型相同的结构体)

REPORT demo_int_tables_append .

* append ... to

*下边定义了一个结构体,也就是个工作区

DATA: BEGIN OF wa ,                    

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

*下边定义了一个内表itab,(no work area, no header line)

DATA itab LIKE standard TABLE OF wa.            

DO 3 TIMES.

    wa-col1 = sy-index. wa-col2 = sy-index ** 2.

  APPEND wa TO itab.

ENDDO.

LOOP AT itab INTO wa.

  WRITE: / wa-col1, wa-col2.

ENDLOOP.

 

表头行(header line)(又叫隐式工作区):

ABAP为程序员提供一种简单的方法,在创建内表对象的同时可以隐式的创建一个同名工作区,这个同名工作区就叫做表头行(header line),其实它和工作区是一样的,只不过定义方法和叫法不同。

“笔者不提倡读者使用带有表头行的内表,而是应该总是声明结构相同的其他数据对象(即显式工作区)作为对内表行操作的中转站。”《SAP程序设计》P129

REPORT demo_int_tables_append .

* append ... to

DATA: BEGIN OF wa ,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

*下边用with header line定义了一个和内表itab同名的工作区itab

DATA itab LIKE standard table of wa with header line.

*DATA itab like wa occurs 0 with header line.

*上面的这两句是完全一样的定义

DO 3 TIMES.

    itab-col1 = sy-index. itab-col2 = sy-index ** 2.

  APPEND itab.

ENDDO.

*下边的输出的是内表itab中的数据

LOOP AT itab.

  WRITE: / itab-col1, itab-col2.

ENDLOOP.

*下边的输出的是同名工作区itab中的数据

WRITE: / itab-col1, itab-col2.

其他定义形式:

这种形式也声明了一个标准内表,并分配初始内存大小为10行,OCCURS是ABAP3.0之前声明内表的关键字。(《SAP程序设计》P125“不建议使用,但是由于系统维护时需要接触旧的ABAP代码,所以还要介绍”)

 

 

 

 

 

 

 

REPORT demo_int_tables_append .

* append ... to

*occurs是ABAP3.0之前声明内表的关键字

*这样声明即定义了一个内表WA,

*同时WA又带了一个同名的工作区(wa[]代表内表,wa代表工作区)

DATA: BEGIN OF wa occurs 10,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

DO 3 TIMES.

    wa-col1 = sy-index. wa-col2 = sy-index ** 2.

  APPEND  wa.

ENDDO.

wa-col1 = 'x'.

wa-col2 = 100.

WRITE: / wa-col1, wa-col2.

skip.

LOOP AT wa .

  WRITE: / wa-col1, wa-col2.

ENDLOOP.

skip.

WRITE: / wa-col1, wa-col2.

 

OCCURS和WITH HEADER LINE:

OCCURS是声明了一个标准内表(abap3.0以前版本),而with header line是使这个标准内表同时带了同名工作区(即表头行)

REPORT demo_int_tables_append.

* append ... to

data: BEGIN OF wa ,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

*DATA itab LIKE standard table of wa.

*DATA itab LIKE standard table of wa with header line.

*the specification "with header line" cannot be used with table types.

*DATA itab like wa with header line.

DATA itab like wa occurs 0.

**下边代码会产生错误,因为上面定义的内表itab不带工作区(表头行)

*一个表肯定不能直接write出字段

*write : / itab-col1, itab-col2.

DO 3 TIMES.

    wa-col1 = sy-index. wa-col2 = sy-index ** 2.

  APPEND wa TO itab.

ENDDO.

*itab和itab[]都代表内表itab,虽然内表itab不带表头行

LOOP AT itab INTO wa.

  WRITE: / wa-col1, wa-col2.

ENDLOOP.

loop at itab[] into wa.

write: / wa-col1,wa-col2.

endloop.

因为有了同名工作区而产生的问题:

          ----------------itab 和itab[]

REPORT demo_int_tables_append .

* append ... to

DATA: BEGIN OF wa ,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

DATA itab LIKE standard table of wa with header line.

DO 3 TIMES.

   itab-col1 = sy-index. itab-col2 = sy-index ** 2.

  APPEND itab.

ENDDO.

LOOP AT itab.

  WRITE: / itab-col1, itab-col2.

ENDLOOP.

*不是说带表头行的内表,itab代表表头行(工作区),itab[]才代表内*表吗?

*在loop at循环中itab就代表内表,而不是表头行(工作区)

*因为表头行(工作区)就一行,所以不需要也不能loop循环

loop at itab into wa.

  write: / wa-col1,wa-col2.

endloop.

*不管什么时候itab[]都代表内表本身

loop at itab[] into wa.

  write: / wa-col1,wa-col2.

endloop.

*在不在loop循环中的时候才是itab代表表头行,而itab[]代表内表本身

*就如后边要讲的 move itab to jtab 与 move itab[] to jtab[]的区别

write : / itab-col1, itab-col2.

同名的工作区的小例子:

1.读取内表数据时候,用了同名工作区做中转站

REPORT demo_int_tables_append .

* append ... to

*occurs是ABAP3.0之前声明内表的关键字

*这样声明即定义了一个内表WA,

*同时WA又带了一个同名的工作区(itab[]代表内表,itab代表工作区)

DATA: BEGIN OF itab occurs 10,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF itab.

DO 3 TIMES.

    itab-col1 = sy-index. itab-col2 = sy-index ** 2.

  APPEND itab.

ENDDO.

itab-col1 = 'x'.

itab-col2 = 100.

*输出工作区itab中的数据

WRITE: / itab-col1, itab-col2.

skip.

*loop后边的不管是itab[],还是itab都是内表,

*因为工作区(表头行)只有一行,所以是不用循环读取的,

*下边的itab是个带工作区(表头行)的内表,

*所以它循环读取的时候是用自己的同名工作区来做中转站的.

LOOP AT itab.

  WRITE: / itab-col1, itab-col2.

ENDLOOP.

skip.

*输出工作区itab中数据

WRITE: / itab-col1, itab-col2.

 

2.读取内表数据时没有用同名工作取做中转站,而是用的另外定义的工作区wa

REPORT demo_int_tables_append .

* append ... to

*occurs是ABAP3.0之前声明内表的关键字

*这样声明即定义了一个内表WA,

*同时WA又带了一个同名的工作区(itab[]代表内表,itab代表工作区)

DATA: BEGIN OF itab occurs 10,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF itab.

*定义工作区wa

data:wa like itab.

DO 3 TIMES.

    itab-col1 = sy-index. itab-col2 = sy-index ** 2.

  APPEND itab.

ENDDO.

itab-col1 = 'x'.

itab-col2 = 100.

*输出工作区itab中的数据

WRITE: / itab-col1, itab-col2.

skip.

*loop后边的不管是itab[],还是itab都是内表,

*因为工作区(表头行)只有一行,所以是不用循环读取的,

LOOP AT itab into wa.

  WRITE: / wa-col1, wa-col2.

ENDLOOP.

skip.

*输出工作区itab中数据

WRITE: / itab-col1, itab-col2.

 

初始化内表:

初始化内表的作用是清空内表所有的数据行,将内表恢复到填充或赋值之前的状态。初始化内表要注意的问题仍然是初始化有表头行和无表头行的内表的区别,以及初始化内表和表头行的区别。

1.          Clear 用法:clear itab 。“这样做将清空内表中所有数据,同时清空该内表的表头行中的所有数据。如果想只清空内表中数据,而保留表头行中数据,则应该用clear itab[]。”上边的话是《    SAP程序设计》中135页的话,其实是错误的。正确的应该是:对与一个有工作区的内表itab,clear itab清空的是工作区,而不清空内表;clear itab[]是清空内表,而不清空工作区。

REPORT demo_int_tables_append .

* append ... to

DATA: BEGIN OF wa ,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

DATA itab LIKE standard table of wa with header line.

DO 3 TIMES.

    itab-col1 = sy-index. itab-col2 = sy-index ** 2.

  APPEND itab.

ENDDO.

LOOP AT itab.

  WRITE: / itab-col1, itab-col2.

ENDLOOP.

skip.

*不是说带表头行的内表,itab代表表头行(工作区),itab[]才代表内表吗?

*在loop at循环中itab就代表内表,而不是表头行(工作区)

loop at itab into wa.

  write: / wa-col1,wa-col2.

endloop.

skip.

*不管什么时候itab[]都代表内表本身

loop at itab[] into wa.

  write: / wa-col1,wa-col2.

endloop.

skip.

*在不在loop循环中的时候才是itab代表表头行,而itab[]代表内表本身

write : / itab-col1, itab-col2.

skip.

*对与有表头行的内表,clear itab 和 clear itab[]的区别

clear itab.

clear itab[].

LOOP AT itab.

  WRITE: / itab-col1, itab-col2.

ENDLOOP.

*下边会多输出一个零,是工作区中的默认值(字符型默认值为空,数值型默认值为0)

write : / itab-col1, itab-col2.

2.          Refresh

Free

这两个关键字的作用基本相同,都是只能清空内表中的数据,而不能清空内表同名工作区中的数据。区别就是refresh并不会同时将预先分配给内表的内存释放,而free则同时释放了预先分配给内表的内存(默认的是8K)。clear也不释放掉内存。

 

REPORT demo_int_tables_append .

* append ... to

* 定义工作区wa

DATA: BEGIN OF wa,

        col1(1) TYPE c,

        col2 TYPE i,

      END OF wa.

*下边定义了一个内表itab,(no work area, no header line)

DATA itab LIKE standard TABLE OF wa with header line.

DO 3 TIMES.

    wa-col1 = sy-index. wa-col2 = sy-index ** 2.

  APPEND wa TO itab.

ENDDO.

LOOP AT itab INTO wa.

  WRITE: / wa-col1, wa-col2.

ENDLOOP.

itab-col1 = 'x'.

itab-col2 = 100.

*refresh和free一样都只是清空内表中数据,而不清工作区

refresh itab.

*free itab只是清空了内表中数据,没清空工作取中数据

*free itab.

*用if itab is not initial来判别内表工作区是否为空

if itab is not initial.

write / 'itab is not empty'.

endif.

*if itab[] is initial来判别内表是否为空

if itab[] is initial.

write / 'itab[] is  empty'.

endif.

write: / itab-col1,itab-col2.

对内表操作:

内表的整体赋值

如果想一次将内表的全部内容复制到另一内表中,请使用 MOVE 语句或赋值 操作符 (=),用 法如下:

MOVE <itab1> TO <itab2>.

该语句等价 于:

<itab2> = <itab1>.

也可进行多 重赋值,例 如,

<itab4> = <itab3> = <itab2> = <itab1>.

REPORT:ZDZ.

DATA: BEGIN OF LINE,

         COL1,

         COL2,

      END OF LINE.

DATA ETAB LIKE LINE OCCURS 10 WITH HEADER LINE.

DATA FTAB LIKE LINE OCCURS 10.

LINE-COL1 = 'A'. LINE-COL2 = 'B'.

APPEND LINE TO ETAB.

*因为ETAB是带表头行的,所以ETAB[]才是内表,ETAB是工作区

*所以 MOVE ETAB TO FTAB.会报错(类型不匹配)

MOVE ETAB[] TO FTAB.

LOOP AT FTAB INTO LINE.

   WRITE: / LINE-COL1, LINE-COL2.

ENDLOOP.

确定内表属性

如果在处理过程中想知道内表一共包含多少行 ,或者想知道定义的 OCCURS 参数的大小 ,请使用 DESCRIBE 语句,

DATA: BEGIN OF LINE,

         COL1 TYPE I,

         COL2 TYPE I,

      END OF LINE.

DATA ITAB LIKE LINE occurs 10.

DATA: LIN TYPE I,

      OCC TYPE I.

DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.

WRITE: / LIN, OCC.

DO 1000 TIMES.

  LINE-COL1 = SY-INDEX.

  LINE-COL2 = SY-INDEX ** 2.

  APPEND LINE TO ITAB.

ENDDO.

DESCRIBE TABLE ITAB LINES LIN OCCURS OCC.

WRITE: / LIN, OCC.

用 MODIFY 更改行:

1.     如果使用 INDEX 选项,则新行代替索引为 <idx> 的现有行。

REPORT:ZDZ.

DATA: BEGIN OF LINE,

         COL1 TYPE I,

         COL2 TYPE I,

      END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

DO 3 TIMES.

   LINE-COL1 = SY-INDEX.

   LINE-COL2 = SY-INDEX ** 2.

   APPEND LINE TO ITAB.

ENDDO.

LINE-COL1 = 10. LINE-COL2 = 10 ** 2 .

MODIFY ITAB FROM LINE INDEX 2.

LOOP AT ITAB INTO LINE.

   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.

ENDLOOP.

 

 

 

 

2. 如果使用没有 INDEX 选项的 MODIFY 语句,则系 统只能在 LOOP - ENDLOOP 块中通过更 改当前行( 例如由 SY-TABIX 返回其索引的行)来处理它。

REPORT:ZDZ.

DATA: BEGIN OF LINE,

         COL1 TYPE I,

         COL2 TYPE I,

      END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

*sy-index 为循环中,当前通过的编号

DO 3 TIMES.

   LINE-COL1 = SY-INDEX.

   LINE-COL2 = SY-INDEX ** 2.

   APPEND LINE TO ITAB.

ENDDO.

*sy-tabix内表的索引

LOOP AT ITAB INTO LINE.

   IF SY-TABIX = 2.

      LINE-COL1 = SY-TABIX * 10.

      LINE-COL2 = ( SY-TABIX * 10 ) ** 2 .

      MODIFY ITAB FROM LINE.

   ENDIF.

ENDLOOP.

LOOP AT ITAB INTO LINE.

   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.

ENDLOOP.

 

用 WRITE TO 更改行

REPORT:ZDZ.

DATA CODE(72) OCCURS 10 WITH HEADER LINE.

CODE = 'This is the first line.'.

APPEND CODE.

CODE = 'This is the second line. It is ugly.'.

APPEND CODE.

CODE = 'This is the third and final line.'.

APPEND CODE.

WRITE 'nice' TO CODE+31 INDEX 2.

LOOP AT CODE.

   WRITE / CODE.

ENDLOOP.

 

 

在循环中删除行

REPORT:ZDZ.

DATA: BEGIN OF LINE,

         COL1 TYPE I,

         COL2 TYPE I,

      END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

LOOP AT ITAB INTO LINE.

   IF LINE-COL1 < 28.

      DELETE ITAB.

   ENDIF.

ENDLOOP.

LOOP AT ITAB INTO LINE.

   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.

ENDLOOP.

用索引删除行

REPORT:ZDZ.

DATA: BEGIN OF LINE,

         COL1 TYPE I,

         COL2 TYPE I,

      END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

DO 5 TIMES.

   LINE-COL1 = SY-INDEX.

   LINE-COL2 = SY-INDEX ** 2.

   APPEND LINE TO ITAB.

ENDDO.

DELETE ITAB INDEX: 2, 3, 4.

*SY-SUBRC返回值为4,说明删除不成功

*第一次删除第二行成功,一共剩四行

*第二次删除第三行成功,一共剩三行

*第三次删除第四行失败,因为一共就三行了.

WRITE: 'SY-SUBRC',SY-SUBRC.

LOOP AT ITAB INTO LINE.

   WRITE: / SY-TABIX, LINE-COL1, LINE-COL2.

ENDLOOP.

 

删除邻近的重复条目

REPORT:ZDZ.

DATA: BEGIN OF LINE,

        COL1 TYPE I,

        COL2 TYPE C,

      END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.

LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.

LINE-COL1 = 1. LINE-COL2 = 'B'. APPEND LINE TO ITAB.

LINE-COL1 = 2. LINE-COL2 = 'B'. APPEND LINE TO ITAB.

LINE-COL1 = 3. LINE-COL2 = 'B'. APPEND LINE TO ITAB.

LINE-COL1 = 4. LINE-COL2 = 'B'. APPEND LINE TO ITAB.

LINE-COL1 = 5. LINE-COL2 = 'A'. APPEND LINE TO ITAB.

LOOP AT ITAB INTO LINE.

   WRITE: / LINE-COL1, LINE-COL2.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.

SKIP TO LINE 3.

LOOP AT ITAB INTO LINE.

   WRITE: /14 LINE-COL1, LINE-COL2.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM ITAB COMPARING COL1.

SKIP TO LINE 3.

LOOP AT ITAB INTO LINE.

   WRITE: /28 LINE-COL1, LINE-COL2.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM ITAB.

SKIP TO LINE 3.

LOOP AT ITAB INTO LINE.

   WRITE: /42 LINE-COL1, LINE-COL2.

ENDLOOP.

 

 

 

 

 

 

 

 

删除选定行

REPORT:ZDZ.

DATA: BEGIN OF LINE,

        COL1 TYPE I,

        COL2 TYPE I,

      END OF LINE.

DATA ITAB LIKE LINE OCCURS 10.

DO 40 TIMES.

   LINE-COL1 = SY-INDEX.

   LINE-COL2 = SY-INDEX ** 2.

   APPEND LINE TO ITAB.

ENDDO.

DELETE ITAB FROM 3 TO 38 WHERE COL2 > 20.

LOOP AT ITAB INTO LINE.

   WRITE: / LINE-COL1, LINE-COL2.

ENDLOOP.

 

 

内表排序

“内表的表关键字在访问内表和内表排序中起着相当重要的作用,在内表定义语句中,使用WITH key指定内表关键字,该项为可选项,如果不指定,则系统会使用默认(标准)关键字,如果程序员指定,则有以下形式:

 

 

 

1.             如果内表行是结构体,则可以指定结构体中的某几个字段作为内表关键字,该字段不能是内表或者引用类型,但是可以是嵌套的结构体。

REPORT demo_structure.

 

types: BEGIN OF name,

         title(5)       TYPE c,

         first_name(10) TYPE c,

         last_name(10)  TYPE c,

       END OF name.

 

types: BEGIN OF mylist,

         client         TYPE name,

         number         TYPE i,

       END OF mylist.

DATA :list type table of mylist 

      with non-unique key number

      with header line.

     2.  如果内表的整行都是由基本类型字段组成,则可以将内表的整个行定义为表关键字。如果内表字段本身是结构化类型,则不宜指定整行作为关键字段。所以下边的做法是不好的。

 REPORT demo_structure.

 

types: BEGIN OF name,

         title(5)       TYPE c,

         first_name(10) TYPE c,

         last_name(10)  TYPE c,

       END OF name.

 

types: BEGIN OF mylist,

         client         TYPE name,

         number         TYPE i,

       END OF mylist.

DATA :list type table of mylist 

      with non-unique key table line

      with header line.

 

      3.如果不指定任何关键字,则系统会默认的选择关键字段。(扁平结构内表的默认关键字段为非数字和非内表的组件字段)如果内表行是由单个基本类型组成,则默认关键字为整个行。如果内表行中包含有内表类型字段,则没有默认关键字。

      4.关键UNIQUE KEY (不可以出现关键字相同的数据行)/ NON-UNIQUE KEY(可以出现关键字相同的数据行)是决定了内表中具有相同关键字的数据行是否可以重复出现,在标准内表中不能用UNIQUE KEY,而且不需要特别指定NON-UNIQUE KEY。所以这个关键字在标准内表中一般都不需要写。

REPORT:ZDZ.

DATA: BEGIN OF ITAB OCCURS 10,

         LAND(3)  TYPE C,

         NAME(10) TYPE C,

         AGE      TYPE I,

         WEIGHT   TYPE P DECIMALS 2,

      END OF ITAB.

ITAB-LAND = 'USA'. ITAB-NAME   = 'Nancy'.

ITAB-AGE  = 35.    ITAB-WEIGHT = '45.00'.

APPEND ITAB.

ITAB-LAND = 'USA'. ITAB-NAME   = 'Howard'.

ITAB-AGE  = 40.    ITAB-WEIGHT = '95.00'.

APPEND ITAB.

ITAB-LAND = 'GB'.  ITAB-NAME   = 'Jenny'.

ITAB-AGE  = 18.    ITAB-WEIGHT = '50.00'.

APPEND ITAB.

ITAB-LAND = 'F'.   ITAB-NAME   = 'Michele'.

ITAB-AGE  = 30.    ITAB-WEIGHT = '60.00'.

APPEND ITAB.

ITAB-LAND = 'G'.   ITAB-NAME   = 'Karl'.

ITAB-AGE  = 60.    ITAB-WEIGHT = '75.00'.

APPEND ITAB.

SORT ITAB.

LOOP AT ITAB.

   WRITE: / ITAB-LAND, ITAB-NAME, ITAB-AGE, ITAB-WEIGHT.

ENDLOOP.

SKIP.

SORT ITAB DESCENDING BY LAND WEIGHT ASCENDING.

LOOP AT ITAB.

   WRITE: / ITAB-LAND, ITAB-NAME, ITAB-AGE, ITAB-WEIGHT.

ENDLOOP.

在此创建有 表头行的内 表 ITAB 并用 5 行对其进行 填充。首先 根据其标准 关键字(LAND 和 NAME) 进行排序。 然后根据定 义为 LAND 和 WEIGHT 的排序关键 字进行排序 。一般排序 顺序定义为 降序,但对 于 WEIGHT, 定义为升序 。这就是为 什么在第二 个 SORT 语句之后包 含 NAME 字段“NANCY” 的行在包含 NAME 字段“HOWARD” 的行之前输 出。

 

 

 

 

 

 

 

比较内表

 

DATA: BEGIN OF LINE,

         COL1 TYPE I,

         COL2 TYPE I,

      END OF LINE.

DATA: ITAB LIKE LINE OCCURS 10,

      JTAB LIKE LINE OCCURS 10.

DO 3 TIMES.

   LINE-COL1 = SY-INDEX.

   LINE-COL2 = SY-INDEX ** 2.

   APPEND LINE TO ITAB.

ENDDO.

MOVE ITAB TO JTAB.

LINE-COL1 = 10. LINE-COL2 = 20.

APPEND LINE TO ITAB.

IF ITAB GT JTAB.

   WRITE / 'ITAB GT JTAB'.

ENDIF.

APPEND LINE TO JTAB.

IF ITAB EQ JTAB.

   WRITE / 'ITAB EQ JTAB'.

ENDIF.

LINE-COL1 = 30. LINE-COL2 = 80.

APPEND LINE TO ITAB.

IF JTAB LE ITAB.

   WRITE / 'JTAB LE ITAB'.

ENDIF.

LINE-COL1 = 50. LINE-COL2 = 60.

APPEND LINE TO JTAB.

IF ITAB NE JTAB.

   WRITE / 'ITAB NE JTAB'.

ENDIF.

IF ITAB LT JTAB.

   WRITE / 'ITAB LT JTAB'.

ENDIF.

 

 

 

 

REPORT demo_int_tables_append .

tables :spfli.

 

SELECT  * from spfli into spfli.

   WRITE: / spfli-CITYFROM.

endselect.

这篇关于【转】内表的操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/560611

相关文章

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解