2.内表和
2.1 结构体(
2.1.1 结构体的定义
结构体不属于数据字典对象(数据字典中可以定义结构体,但不能存储数据),在程序运行时会被作为临时对象存储在内存空间;
在创建内表时,可参考直接定义的结构体作为
结构体的定义,可以通过两种方式实现:
1.第一种方式
语法:
DATA: BEGIN OF
. . .
. . .
. . .
END OF .
如:
TABLES: TABNA.
DATA: BEGIN OF ADDRESS,
FLAG TYPE C,
ID LIKE TABNA-ID,
NAME1 LIKE TABNA-NAME1,
CITY LIKE TABNA-CITY,
END OF ADDRESS.
* 为结构体字段赋值
MOVE 'X' TO ADDRESS-FLAG.
MOVE '0001' TO ADDRESS-ID.
MOVE 'Smith' TO ADDRESS-NAME1.
MOVE 'Philadelphia' TO ADDRESS-CITY.
WRITE ADDRESS.
2.第二种方式
语法:
TYPES: BEGIN OF ,
. . . ,
. . . ,
. . . ,
END OF .
DATA: TYPE .
如:
TYPES: BEGIN OF ADDR,
FLAG,
ID LIKE EMPLOYEE-ID,
NAME1 LIKE EMPLOYEE-NAME1,
CITY LIKE EMPLOYEE-CITY,
END OF ADDR.
DATA: ADDRESS TYPE ADDR.
MOVE: 'X' TO ADDRESS-FLAG,
'00001' TO ADDRESS-ID,
'Smith' TO ADDRESS-NAME1,
'Philadelphia' TO ADDRESS-CITY.
WRITE ADDRESS.
2.1.2结构体的赋值
相同结构体之间可以通过 MOVE … TO … 语句进行赋值;
如若存在类型差异的结构体,则可以通过 MOVE-CORRESSPONDING … TO … 语句将两个结构体之间相同字段自动匹配赋值:
与基本变量定义类似,结构体的初始化操作也可以通过 CLEAR 语句实现。
如:
TABLES: employee.
DATA: BEGIN OF address,
flag,
id LIKE employee-id,
name LIKE employee-name1,
city LIKE employee-city,
END OF ADDRESS.
SELECT * FROM employee.
MOVE-CORRESPONDING employee TO address.
WRITE: / address-flag, address-id,
address-name, address-city.
CLEAR address.
ENDSELECT.
内表与结构体基本类似,同样在程序运行过程中存储在临时创建的内存空间,它是一个可以存储多条记录的数据表。</