PROGRAM SAPMZTST.
TYPES: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE I,
END OF LINE.
DATA: ITAB TYPE LINE OCCURS 10 WITH HEADER LINE,
JTAB TYPE LINE OCCURS 10.
PERFORM FILL TABLES ITAB.
MOVE ITAB[] TO JTAB.
PERFORM OUT TABLES JTAB.
FORM FILL TABLES F_ITAB LIKE ITAB[].
DO 3 TIMES.
F_ITAB-COL1 = SY-INDEX.
F_ITAB-COL2 = SY-INDEX ** 2.
APPEND F_ITAB.
ENDDO.
ENDFORM.
FORM OUT TABLES F_ITAB LIKE JTAB.
LOOP AT F_ITAB.
WRITE: / F_ITAB-COL1, F_ITAB-COL2.
ENDLOOP.
ENDFORM.
启动 SAPMZTST 后,输出如 下:
1 1
2 4
3 9
详细解释:WITH HEADER LINE 指明了ITAB要带表头行,
先解释下表头行的作用吧:
内表是按行 进行访问的 。必须使用 某个工作区 域作为与表 格互相传输 数据的接口 。在先前的
学习中我们都又看见这样一个访问内表的句子: LOOP AT F_ITAB INTO F_LINE. F_LINE就是
这样一个接口。那么如果有表头行的话,你就可以省略F_LINE,直接LOOP AT F_ITAB,因为表头行就
是这样一个系统帮你创建的一个表格工作区域(只要你声明时加上WITH HEADER LINE ),那ITAB[]
中的[]是用来做什么的?这个其实是因为如果在语句中使用内表名称,系统将其解释为表格工作区域
的名称,也就是ITAB其实代表 表头行、表格工作区域、访问内表的接口。这样应该理解了吧。有表
头行的内表在运用时要带个中括号,这样才是我们平时用的内表
重点理解:FORM OUT TABLES F_ITAB LIKE JTAB.
请注意,在这种情况下, 将无表头行 的实表格传递给有表头行的形式表 格,并在子程序中使用了表格工作域 F_ITAB。
这是因为如果传递无表头行的内表,则在子程序中自动创建作为局部数据对象的表头行,也就是说F_ITAB是带表头行的,所以LOOP AT F_ITAB.的后面不用指明表格工作区域
http://www.diybl.com/course/7_databases/database_other/20090302/156639.html