【转】内表的操作

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

相关文章

SpringBoot操作MaxComputer方式(保姆级教程)

《SpringBoot操作MaxComputer方式(保姆级教程)》:本文主要介绍SpringBoot操作MaxComputer方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录引言uqNqjoe一、引入依赖二、配置文件 application.properties(信息用自己

C#中的 Dictionary常用操作

《C#中的Dictionary常用操作》C#中的DictionaryTKey,TValue是用于存储键值对集合的泛型类,允许通过键快速检索值,并且具有唯一键、动态大小和无序集合的特性,常用操作包括添... 目录基本概念Dictionary的基本结构Dictionary的主要特性Dictionary的常用操作

C# winform操作CSV格式文件

《C#winform操作CSV格式文件》这篇文章主要为大家详细介绍了C#在winform中的表格操作CSV格式文件的相关实例,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录实例一实例效果实现代码效果展示实例二实例效果完整代码实例一实例效果当在winform界面中点击读取按钮时 将csv中

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from