abap 内表 条件查找_ABAP学习(4):内表

ABAP内表

ABAP内表类似于一个结构体,可以用来保存从数据库表中查出来的数据。内表只是在内存中作为操作表数据载体,在java等语言中使用对象保存一条数据库记录,对象列表保存多条记录。ABAP中使用内表保存数据库表中的一条或多条记录。

1内表定义

方式1:

使用types定义结构类型:定义内表行结构

Types:begin of ,

type|like ,

…………

end of .

定义内表:

Data: type ( table| sorted table | hashed table ) of

[with non-unique default key]

[initial size ]

[with header line]

示例:

*"定义linetype

TYPES: BEGIN OFfirstLine,

id(8) type C,

name(20) type C,

age type I,

addr(30) type C,

end of firstLine."定义内表(不指定talbe类型默认标准table,标准表只能使用 with NON-UNIQUE DEFAULT KEYData: firstTabTYPE TABLE OFfirstLine

with NON-UNIQUE DEFAULT KEYINITIAL SIZE 20

WITH HEADER LINE

"定义sorted table WITH UNIQUE KEY,或with non-unique default key 指定是否使用重复key fieldData: firstTab1 type SORTEDTABLE OFfirstLineINITIAL SIZE 20

WITH HEADER LINE

WITH NON-UNIQUE DEFAULT KEY."定义hash table 必须指定 WITH UNIQUE key,key field不重复Data: firstTab2TYPE HASHED TABLE OFfirstLineWITHUNIQUE KEY id.INITIAL SIZE 20

WITH HEADER LINE.

方式2:

使用data定义结构体:定义行结构

Data:begin of ,

type|like ,

…………

end of .

定义内表:语法类似,只是将type关键字换成like关键字

示例:

"使用data定义结构体

DATA: BEGIN OFfirstLine1,

id(8) type C,

name(20) type C,

age type I,

addr(30) type C,

end of firstLine1."定义内表必须使用like table of

DATA:firstTab3 LIKE TABLE OFfirstLine1.DATA:firstTab4 LIKE SORTED TABLE OF firstLine1 WITH NON-UNIQUE DEFAULT KEY.DATA:firstTab5 LIKE HASHED TABLE OF firstLine1 WITHUNIQUE KEY id.

方式3:直接使用data定义内表

Data:begin of occurs ,

type|like ,

…………

end of .

示例:

"直接定义内表,带header line

DATA:BEGIN OF t_people OCCURS 0,

name typestring,

age type I,END OF t_people.

方式4:定义数据库表,结构体类型的内表:

Data: ( type | like ) [] table of ( 数据库表名 | 结构体名 )

[with header line]

示例:

"type:ABAP中使用types定义类型需使用type;ABAP提供的基本类型,结构体,数据库表,感觉和like区别不大

"like : 程序员定义类型,数据库表名

"根据数据库表定义内表

DATA:t_spfli LIKE TABLE OFspfli.DATA:t_spfli1 TYPE TABLE OFspfli."有表头行

DATA:t_spfli2 LIKE TABLE OF spfli WITH HEADER LINE.DATA:t_spfli3 TYPE TABLE OF spfli WITH HEADER LINE."可以是自己定义的数据库表,结构体,z_spfli 为自定义数据库表,结构体

DATA:t_test LIKE TABLE OFZ_SPFLI.DATA:t_test TYPE TABLE OF Z_SPFLI.

2内表表头行

根据内表是否具有表头行,我们的操作也不同。判断内表是否具有表头行我们一般判断定义内表时,是否有with header line 关键词,occurs定义的内表,具有表头行。

带表头行内表插入操作:直接使用append 语句插入

不带表头行内表插入操作:需要先定义一个结构体类型的工作区,然后将工作区赋值,通过append to

示例:

"直接定义内表,带header line

DATA:BEGIN OF t_people OCCURS 0,

name typestring,

age type I,END OFt_people."带headline的内表赋值

t_people-name = 'tang'.

t_people-age = 11."添加记录到t_people

APPENDt_people."没有表头行内表赋值

DATA:BEGIN OFl_people,

nameTYPE string,

ageTYPEI,END OFl_people."如果上面是使用types定义type,还需要定义一个工作区

"DATA:wa_people LIKE LINE OF l_people.

DATA:t_people LIKE TABLE OFl_people."内表赋值

l_people-name = 'tang'.

l_people-age = 10.APPEND l_people to t_people.

3内表赋值

内表初始化:使用refresh

内表和其他类型变量:

内表使用clear [];

clear 工作区初始化

clear

释放内存空间:free

"初始化内表

"清空内表,不能用于其他类型变量初始化

refresh firstTab."clear可以用于其他类型变量初始化

"如果内表有表头行,清空表头工作区。

CLEARfirstTab."refresh功能,清空内表

CLEARfirstTab[]."clear,refresh不会释放内存,free释放内表所占内存

FREE firstTab.

两个内表之间赋值,需要在循环中逐条赋值:

将内表表头行A赋值给B内表表头行

语法:move-corresponding to

语法:append

这个也可以用于两个工作区之间赋值

DATA:firstTab TYPE TABLE OF firstLine WITH HEADER LINE.DATA:firstTab1 TYPE TABLE OF firstLine WITH HEADER LINE.

firstTab-id = 1.

firstTab-name = '113'.APPENDfirstTab.

firstTab-id = 2.

firstTab-name = '114'.APPENDfirstTab."table之间赋值,这个语句必须两个都是具有表头行内表

LOOP ATfirstTab."这句只是将工作区值加入目标内表工作区,三种写法都可

MOVE-CORRESPONDINGfirstTab to firstTab1.*firstTab1[] = firstTab[].

*MOVE firstTab[] to firstTab1[].

*firstTab1 = firstTab[]. "这种写法只有firstTab1是不带表头行的内表才有效

*MOVE firstTab to firstTab1[]."这句报错

"将工作区保存到内表

APPENDfirstTab1.ENDLOOP.DATA:wa_line LIKE LINE OFfirstTab1.

你可能感兴趣的:(abap,内表,条件查找)