天天看點

abap内表,标題行,工作區

先是用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 的差別

繼續閱讀