内表
一.
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.
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库内表的操作在线全文阅读。
相关推荐: