PR

【SAP/ABAP】変数/構造と内部テーブルの違いを3分でわかりやすく解説

ABAP

ABAPをコーディングする上での超・基本となる変数構造(ワークエリア)・内部テーブル:SAPのデータオブジェクトの基本について解説します。

変数・構造・内部テーブルの違いを端的に表した図がこちら。

ABAP 変数,ABAP 構造,ABAP 内部テーブル
図1:変数 vs 構造 vs 内部テーブル

このページでは、SAP・ABAP初心者向けにコーディングの基本となる変数・構造・内部テーブルの違いをわかりやすく図解して解説します。

このページで学べる内容
  • ABAPの「メモリ」
  • 変数・構造・内部テーブルの基本
  • 変数・構造・内部テーブルの定義方法(DATA命令)

SAPエンジニアやABAPerを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。

参考 ABAPの基本構文ルール

スポンサーリンク

前提:メモリとは?

内部テーブル / 構造(ワークエリア) / 変数を理解する前提となる「メモリ」についてご説明しておきます。

メモリとは、プログラム実行時に中心的な役割を果たす部分で、実行中のプログラムが情報を一時的に保存する場所のこと。分かりやすく説明すると、メモリというのはコンピュータにとっての「メモ帳」のようなものです。

この場合のメモ帳の形式の違いが「変数・構造・内部テーブルの違い」です。

ABAP/プログラミング初心者の方が、内部「テーブル」という言葉に惑わされて、実際にデータベースに保存されているものだと誤認する場合を散見します。

まずは、変数・構造・内部テーブルはどれもプログラム実行中にのみ存在するメモリの一種だと理解してください。この理解の上で、変数・構造・内部テーブルの違いを1つ1つご説明していきます。

変数・構造・内部テーブルの違い

変数・構造・内部テーブルのイメージ図は以下の通り。

ABAP 変数,ABAP 構造,ABAP 内部テーブル
図1:変数 vs 構造 vs 内部テーブル

ABAPerは、変数/構造/内部テーブルといったら、これらのイメージ図が頭に思い浮かびます。

ざっくり言ってしまえば、1個だけメモできるのが変数で、複数のレコードをメモできるのが構造で、複数レコードをExcelのようにメモできるのが内部テーブルです。

これらの共通イメージを掴むことが第一歩となります。1つひとつ、深堀しながら解説していきます。

ABAP:変数

ABAP 変数
図2:ABAPの変数

変数はExcelで例えると「1つのセル」に相当します。あるいは変数は「箱」のようなイメージです。

変数(プログラミング)は値を入れる箱です
図3:変数のイメージ

変数にはあくまでも1つのレコードしか格納することができません。今日の日付を格納した後に、昨日日付を格納しようとすると上書きされてしまいます。

「変数」はプログラミング言語共通

変数の定義方法

DATA: <変数名> TYPE <データ型>.

参考 ABAPのデータ型

変数を定義する場合にはDATA命令を用います。

サンプルコード 変数の定義

DATA: number TYPE I,  " 整数型変数
      text   TYPE STRING. " 文字列型変数

ABAP:構造

構造(ワークエリア)
図4:構造(ワークエリア)

「構造」は「ワークエリア」とも呼ばれる場合もあります。

構造はExcelで例えると1行の複数セルに相当します。

よくある利用シーンとしてはABAPのLOOP処理などが有名です。

ループ

"LOOP" は内部テーブルから「特定のデータを抽出して1レコードずつ処理を行う場合」に利用される命令です。

詳しく知りたい方はこちらの記事をどうぞ。

構造の定義方法

" 構造「型」の定義
TYPES: BEGIN OF <StructName>, 
         FieldName1 FieldType1,
         FieldName2 FieldType2,
         ... 
       END OF <StructName>.

" 構造の定義
DATA: <構造> TYPE <StructName>.

***既存のデータベーステーブル名や構造名をTYPEオプションに指定して構造を定義することも可能***
DATA: <構造> TYPE (データベーステーブル名 ex BKPF).

参考 TYPES命令 / テーブルの基本

以下にいくつかサンプルコードを示します。

サンプルコード1

* 構造「型」の定義
TYPES: BEGIN OF t_employee,
         id   TYPE n LENGTH 5,
         name TYPE string,
         age  TYPE i,
       END OF t_employee.

* 構造の宣言
DATA: employee TYPE t_employee.

* 構造の各フィールドに値をセット
employee-id   = '00001'.
employee-name = 'Tanaka'.
employee-age  = 30.

サンプルコード2

* データベーステーブルの構造体を利用する変数の宣言
DATA: flight TYPE SFLIGHT.

* SELECT文でデータベースからデータを取得
SELECT SINGLE * FROM SFLIGHT INTO flight WHERE CARRID = 'AA' AND CONNID = '0017' AND FLDATE = '19910101'.

* 変数のフィールドから値を取得
WRITE: / 'Airline Code: ', flight-CARRID.
WRITE: / 'Connection ID: ', flight-CONNID.
WRITE: / 'Flight Date: ', flight-FLDATE.

参考 SELECT SINGLE / WRITE

「DATA: flight TYPE SFLIGHT.」の部分では、あくまでもSFLIGHTというDBテーブルのカラム定義を参照しているだけであって、SFLIGHTと同じ行列を持つ内部テーブルを宣言しているわけではないということに注意しましょう。

内部テーブル

図5:内部テーブル

内部テーブルは、ご覧の通り「行」と「列」を保持するメモリ構造です。

Excelのようなイメージを持てればOK。

標準テーブルやアドオンテーブルのデータをそっくりそのまま(もしくは条件を絞って)メモしたい、というときに利用することができます。

内部テーブルの定義

内部テーブルの定義には基本的には以下の2つのステップが必要です。

  1. テーブルの行の構造を定義する(あるいは既存の型を利用する)
  2. その構造に基づく内部テーブルを定義する

具体的な構文ルールは以下の通り。

TYPES: BEGIN OF TypeName,
         FieldName1 FieldType1,
         FieldName2 FieldType2,
         ...
       END OF TypeName.

DATA: TableName TYPE TABLE OF TypeName.

構造定義との違いはTYPEオプションの後ろ「TABLE OF」の部分だけ。そのため、通常は以下のように、内部テーブルと構造を同時に定義することが多くあります。

* 行の型を定義
TYPES: BEGIN OF t_employee,
         id   TYPE n LENGTH 5,
         name TYPE string,
         age  TYPE i,
       END OF t_employee.

* 内部テーブルの定義
DATA: it_employees TYPE TABLE OF t_employee,
      wa_employee TYPE t_employee.

* ワークエリアに値をセットして、内部テーブルに追加
wa_employee-id   = '00001'.
wa_employee-name = 'Tanaka'.
wa_employee-age  = 30.
APPEND wa_employee TO it_employees.

wa_employee-id   = '00002'.
wa_employee-name = 'Suzuki'.
wa_employee-age  = 25.
APPEND wa_employee TO it_employees.

* 内部テーブルからデータを取得
LOOP AT it_employees INTO wa_employee.
  WRITE: / 'ID: ', wa_employee-id,
          ' Name: ', wa_employee-name,
          ' Age: ', wa_employee-age.
ENDLOOP.

参考 APPEND命令

↑のコードでは、まず従業員の情報(ID、名前、年齢)を保持する構造の「型」を定義。そしてその構造を行の型とする内部テーブルit_employeesを定義し、同じ型のワークエリアwa_employeeを定義しています。

変数・構造(ワークエリア)・内部テーブルのまとめ

ABAP 変数,ABAP 構造,ABAP 内部テーブル
図1:変数 vs 構造 vs 内部テーブル
  1. 変数: 基本的なデータを保持する(数値、文字列など)。個別のデータ項目を操作するために使用される。
  2. 構造: 複数の関連するデータ項目をグループ化するために使用される。
  3. 内部テーブル: データのリストを保持するために使用される。テーブルは行と列の形でデータを格納し、各行は同じタイプのフィールドを持つことができる。

初めてABAPを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。

ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?

あなたの技術、もっと価値ある場所で活かしませんか?
SAPエンジニアのキャリア支援はこちらから↓

No.1 > 外資系・IT業界などハイクラスの転職なら【アクシスコンサルティング】blank
4人に1人のコンサルタントが選ぶパートナー!
ビッグ4やアクセンチュアへの転職を実現し年収1000万へ。

No.2 > IT・Web転職特化エージェント【レバテックキャリアblank
blank
サービス利用者数20万人突破。

平均年収アップ率77%であなたの転職成功を保証します。

No.3 > blankリクルートエージェント
blank
\転職支援実績NO.1/

応募が殺到しすぎるが故に・・・非公開にせざるを得ない魅力的な求人が多数!

読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
ABAPSAP
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました