DATA命令
13.3 DATA命令
3. DATA命令
DATA命令とは
DATA命令によって作成された変数や構造および内部テーブルは、データオブジェクトと呼ばれます。
TYPES命令で定義した型や事前定義済みデータ型、ABAPディクショナリオブジェクトのデータ型から
DATA命令によって変数や構造および内部テーブルを作成します。
TYPES命令とDATA命令の違い
TYPES命令とDATA命令の違いは明確です。
- DATA命令 ⇒ 変数/構造/内部テーブルを宣言
- TYPES命令 ⇒ 変数/構造/内部テーブルの基となる「型」を定義
となります。
基本的な流れは、①「TYPES命令で型を定義」を行ったあと、②「①で定義したデータ型に基づいてDATA命令で変数/構造を宣言」するという流れになります。
変数
変数は、単一項目の変数であり、データを1つだけ格納することができる箱のことを指します。
DATA命令:変数
変数を宣言する際の構文は以下の通りです。
「サンプルコード」①
3 | *&---------------------------------------------------------------------* |
5 | *&---------------------------------------------------------------------* |
7 | WK_C(10) TYPE C, "テキスト項目 |
11 | *&---------------------------------------------------------------------* |
13 | *&---------------------------------------------------------------------* |
実行結果
構造
構造(ワークエリア/作業領域)は1行に3列や20列など1行複数列の仕切りを持った箱となります。
内部テーブルに値を格納したり、取出したりする場合に使用します。
変数でも同様に構造(ワークエリア/作業領域)に値を格納したり取出したりすることもできます。
DATA命令:構造
DATA宣言での構造の宣言方法は2つあります。
方法①
1つ目は、構造の型を直接参照する方法です。
構造の型を参照する場合は、宣言するだけで構造を定義することができます。
※DBテーブルは、データ型ではないが、SAPの仕様上 構造データ型として使えます。
方法②
2つ目は、DATA BEGIN OFで定義し宣言する方法です。
DATA命令内で構造データ型を「BEGIN OF~END OF」で定義します。
この場合、必要な項目と構造名を同時に定義する必要があります。
ですが、こちらは基本的に使われないです。
構造(ワークエリア/作業領域)を直接定義することとなり、再利用が出来ない事が主な理由です。
「サンプルコード」①
3 | *&---------------------------------------------------------------------* |
5 | *&---------------------------------------------------------------------* |
6 | DATA ST_ZFUJII01 TYPE ZFUJII01. |
8 | *&---------------------------------------------------------------------* |
10 | *&---------------------------------------------------------------------* |
13 | ST_ZFUJII01-MANDT = '800'. "クライアント |
14 | ST_ZFUJII01-KUNNR = 'K001'. "得意先コード |
15 | ST_ZFUJII01-NAME1 = 'テスト株式会社'. "名称1 |
16 | ST_ZFUJII01-NAME2 = '東京都'. "名称2 |
19 | WRITE ST_ZFUJII01-MANDT. |
20 | WRITE ST_ZFUJII01-KUNNR. |
21 | WRITE ST_ZFUJII01-NAME1. |
22 | WRITE ST_ZFUJII01-NAME2. |
実行結果
内部テーブル
内部テーブルは複数行複数列の仕切りを持った箱となります。
ABAPにおける複数行の構造です。「テーブル」の名の付く通り、複数のレコードを保持することができるメモリ領域です。
Excelをイメージして頂くと分かりやすいかと思います。
用途としては、プログラム内で取得したデータを一時的に保持する場合に用いる事が多く、一時的に保持したデータを修正/追加/読込み/取出し/検索条件/出力と様々な形で使用されます。
一時的とはプログラムが実行されて終了するまでの間となり、作業メモリに保持されます。
長期的に保持する場合はABAPディクショナリ(SE11)より作成されたテーブルを使用して保持する必要があります。
テーブル内の値を取出したり修正後に格納したりする際は構造(ワークエリア/作業領域)を使用してデータの受渡しを行います。
DATA命令:内部テーブル
内部テーブルの宣言方法も2つあり、 1つはテーブルデータ型を参照する方法、
もう1つは、構造データ型またはDBテーブルを参照する方法です。
方法①
テーブルデータ型を参照する場合は、これまでと同様に下の構文のように
宣言するだけで内部テーブルを作成することができます。
方法②
構造データ型を参照する場合は、「STANDARD TABLE OF」という構文を
追加する必要があります。
この部分は、作成したい内部テーブルの種類に応じて書き換える必要があります。
内部テーブルの種類や宣言方法については、後述で説明します。
※DBテーブルはデータ型ではないが、SAPシステム上ではDBテーブルの構造を参照するようにSAPシステムの仕様として構築されており、DBテーブルを型として指定すると内部テーブルを作成します。
「サンプルコード」①
2 | *&---------------------------------------------------------------------* |
4 | *&---------------------------------------------------------------------* |
5 | DATA IT_ZFUJII01 TYPE ZFUJII01_TAB. |
7 | *&---------------------------------------------------------------------* |
9 | *&---------------------------------------------------------------------* |
10 | DATA ST_ZFUJII01 TYPE ZFUJII01. |
12 | *&---------------------------------------------------------------------* |
14 | *&---------------------------------------------------------------------* |
16 | *&---------------------------------------------------------------------* |
18 | *&---------------------------------------------------------------------* |
20 | ST_ZFUJII01-MANDT = '800'. |
21 | ST_ZFUJII01-KUNNR = 'K003'. |
22 | ST_ZFUJII01-NAME1 = 'テスト農園'. |
23 | ST_ZFUJII01-NAME2 = '北海道'. |
25 | APPEND ST_ZFUJII01 TO IT_ZFUJII01. |
29 | *&---------------------------------------------------------------------* |
31 | *&---------------------------------------------------------------------* |
33 | ST_ZFUJII01-MANDT = '800'. |
34 | ST_ZFUJII01-KUNNR = 'K004'. |
35 | ST_ZFUJII01-NAME1 = '有限会社abc'. |
36 | ST_ZFUJII01-NAME2 = '東京都'. |
39 | APPEND ST_ZFUJII01 TO IT_ZFUJII01. |
46 | LOOP AT IT_ZFUJII01 INTO ST_ZFUJII01. |
47 | WRITE ST_ZFUJII01-MANDT. |
48 | WRITE ST_ZFUJII01-KUNNR. |
49 | WRITE ST_ZFUJII01-NAME1. |
50 | WRITE ST_ZFUJII01-NAME2. |
実行結果
「サンプルコード」②
2 | *&---------------------------------------------------------------------* |
4 | *&---------------------------------------------------------------------* |
5 | DATA IT_ZFUJII01 TYPE STANDARD TABLE OF ZFUJII01. |
7 | *&---------------------------------------------------------------------* |
9 | *&---------------------------------------------------------------------* |
10 | DATA ST_ZFUJII01 TYPE ZFUJII01. |
12 | *&---------------------------------------------------------------------* |
14 | *&---------------------------------------------------------------------* |
19 | *&---------------------------------------------------------------------* |
21 | *&---------------------------------------------------------------------* |
23 | ST_ZFUJII01-MANDT = '800'. |
24 | ST_ZFUJII01-KUNNR = 'K005'. |
25 | ST_ZFUJII01-NAME1 = 'テスト商事'. |
26 | ST_ZFUJII01-NAME2 = '大阪府'. |
29 | APPEND ST_ZFUJII01 TO IT_ZFUJII01. |
32 | *&---------------------------------------------------------------------* |
34 | *&---------------------------------------------------------------------* |
36 | ST_ZFUJII01-MANDT = '800'. |
37 | ST_ZFUJII01-KUNNR = 'K006'. |
38 | ST_ZFUJII01-NAME1 = 'ABC電工'. |
39 | ST_ZFUJII01-NAME2 = '福岡県'. |
42 | APPEND ST_ZFUJII01 TO IT_ZFUJII01. |
48 | LOOP AT IT_ZFUJII01 INTO ST_ZFUJII01. |
50 | WRITE ST_ZFUJII01-MANDT. |
51 | WRITE ST_ZFUJII01-KUNNR. |
52 | WRITE ST_ZFUJII01-NAME1. |
53 | WRITE ST_ZFUJII01-NAME2. |
実行結果
NEXT>> 13.4 CONSTANTS