先是用TYPES 關鍵字定義一個行(row) 的類型. 如下:
TYPES: BEGIN OF line,
field1 TYPE i,
field2 TYPE i,
END OF line.
這裡的line, 就相當于一個自定義 的類型 , 表示一行(row) 的字段(field).
這裡一行有兩個字段field1 和field2.
然後是聲明一個work area:
DATA wa TYPE line.
運用面向對象的概念了解就是,
line 是一個class, 而wa 是一個object.
接着是聲明一個每一行的類型是line 的internal table:
DATA itab TYPE line OCCURS 0.
我在暫時把OCCURS 作為了差別工作區和内表的标志 .
OCCURS 應該有更深層次的意義, 但我目前隻能領悟至此...
當我們用以上這個方法來聲明一個iternal table 時, 可以選擇是否有無header line.
上面這句就是沒有header line 的. 改成如下就有了:
DATA itab TYPE line OCCURS 0 WITH HEADER LINE.
有無header line 的差別就是,header line 可以當作一個work area 來使用 .
有一下兩種方式操作itab:
1).
wa-field1 = 1.
wa-field2 = 2.
APPEND wa TO itab.
2).
itab-field1 = 1.
itab-field2 = 2.
APPEND itab.
這裡wa 就是上面那個已經定義的work area.
有header line 的時候, 這兩種都可以.
無header line 的時候, 隻能用第1 種.
第2 種裡,itab 的意義是一個header line, 而不是内表.
因為"DATA itab TYPE line OCCURS 0 WITH HEADER LINE." 這樣的聲明,
已經隐式聲明了一個與内表同名的header line.
是以OCCURS 用來聲明内表可能造成二義性(ambiguous).
于是,OCCURS 被認為是old 的東西, 采用一下方式聲明一個内表比較好:
DATA itab TYPE STANDARD TABLE OF line.
還有一種聲明内表的方法:
DATA: BEGIN OF itab OCCURS 0,
field1 TYPE i,
field2 TYPE i,
END OF itab.
這樣的itab 就自動有了一個同名的header line.
好像不會有 WITHOUT HEADER LINE 或者 NOT WITH HEADER LINE 這樣的用法...
如果沒有OCCURS 0, 比如這樣:
DATA: BEGIN OF itab,
field1 TYPE i,
field2 TYPE i,
END OF itab.
那麼這個itab 就不是内表咯, 隻是一個structure, 可以作為itab 的work area.
寫到這裡發現, 歸根到底就是TYPES 和DATA 這兩個關鍵字的差別嘛.
還有有無OCCURS 的差別