!--a11y-->

実行可能プログラムを登録する際、プログラム属性で論理データベースの名称を指定することができます。論理データベースは、特定のデータベーステーブルの内容を結合する特殊な ABAP プログラムです。1 つの論理データベースを任意の数の実行可能プログラムで使用することができます。論理データベースに対してアスタリスク (*) を入力すると、標準データベースが使用されます。この場合、選択画面は制御されますがデータは読み込まれません。
論理データベースがリンクしている実行可能プログラムを実行する場合、2 つのプログラムが単一の実行可能プログラムのように機能し、これらの処理ブロックが特定の順序で実行時環境によって呼び出されます。追加情報については、論理データベースとコンテキストセクションの図を参照してください。
論理データベースの主な機能は、選択画面の呼出とデータの読込です。システムに適切な論理データベースがある場合は、独自の実行可能プログラムでこれらの機能をプログラムする必要はありません。
論理データベースを使用せず、独自の選択画面を定義し Open SQL 命令を使用してデータを読み込む実行可能プログラムは、SQL レポートと呼ばれることもあります。
いくつかの SQL レポートには、1 つの処理ブロック、つまりデフォルトブロック START-OF-SELECTION しかありません。この場合にかぎり、実行可能プログラムは従来の順次処理プログラムのように実行します。ただし、プログラムで選択画面を処理した後すぐに ( たとえば入力項目への入力やユーザ入力のチェックなど) 、さらに処理ブロックを含める必要があります(INITIALIZATION 、AT SELECTION-SCREEN) 。論理データベースを使用する場合は、プログラムは完全にイベント駆動になります。論理データベースとともに使用される最も重要なイベントは GET です。このイベントで、論理データベースはデータベースエントリを実行可能プログラムに渡します。
イベントとその処理順序に関する概要については、実行可能プログラムのイベントブロックを参照してください。もちろん、任意のイベントブロックで Open SQL を使用して独自のデータベースアクセスをプログラムすることもできます。

以下の例は、階層データベーステーブル SPFLI と SFLIGHT からデータを読み込む 2 つの単純な実行可能プログラムを比較したものです。1 つのプログラムでは論理データベースを使用せず、もう 1 つのプログラムでは論理データベース F1S が使用されます。どちらのプログラムでも同じ一覧が生成されます。
論理データベースなしの場合 :
PROGRAM READ_TABLES.
DATA: WA_SPFLI TYPE
SPFLI,
WA_SFLIGHT TYPE SFLIGHT.
SELECT-OPTIONS: SEL_CARR
FOR WA_SPFLI-CARRID,
...
SELECT CARRID CONNID
CITYFROM CITYTO
FROM SPFLI
INTO CORRESPONDING FIELDS OF WA_SPFLI
WHERE CARRID IN SEL_CARR.
WRITE: /
WA_SPFLI-CARRID,
WA_SPFLI-CONNID,
WA_SPFLI-CITYFROM,
WA_SPFLI-CITYTO.
SELECT FLDATE
FROM SFLIGHT
INTO CORRESPONDING FIELDS OF
WA_SFLIGHT
WHERE CARRID =
WA_SPFLI-CARRID
AND CONNID =
WA_SPFLI-CONNID.
WRITE: / WA_SFLIGHT-FLDATE.
ENDSELECT.
ENDSELECT.
このプログラムでは、明示的に宣言された処理ブロックは必要ありません。すべての非宣言命令は、自動的にデフォルトイベントブロック START-OF-SELECTION に属します。選択画面、データの作業領域、および SELECT 命令はすべてプログラム自体に書き込む必要があります。
論理データベースを使用する場合
論理データベース F1S が実行可能プログラムの属性に入力されます。
PROGRAM READ_TABLES.
NODES: SPFLI, SFLIGHT.
GET SPFLI FIELDS CARRID CONNID CITYFROM CITYTO.
WRITE: / SPFLI-CARRID,
SPFLI-CONNID,
SPFLI-CITYFROM,
SPFLI-CITYTO.
GET SFLIGHT FIELDS FLDATE.
WRITE: / SFLIGHT-FLDATE.
このプログラムを論理データベースを使用しないプログラムと比較すると、選択画面の定義やデータの読込が不要であることに気づきます。これらのタスクは論理データベースによって実行されます。NODES 命令は、論理データベースによって読み込まれたデータを配置する作業領域を宣言します。
論理データベースを使用する場合、選択画面と論理データベースによるデータの読込の深度を制御することができます。NODES 命令で、プログラムで使用する論理データベースのノードを指定します。この命令は、プログラムでのこれらのノードのテーブル作業領域を宣言します。これらは、対応するノードと同じ名称と構造を持つデータオブジェクトです。論理データベースの選択画面には、NODES 命令で宣言したノードに対する入力項目のみが含まれています。
論理データベースがデータを読み込む際の深度は、GET イベントブロックを定義することによって制御します。NODES 命令で、すべてのノードに対して GET イベントブロックをプログラムする必要はありません。論理データベースは常に必要なデータを読み込みます。つまり、少なくとも GET イベントブロックが定義されるルートノードから最下位ノードまでのすべてのノードに対するキー項目が読み込まれます。特定のノードを処理に対して定義していない場合、論理データベースはそのノードとその下位ノードすべてを無視します。
各 GET イベントブロックは、現在のノードの項目と、現在の読込パスに沿って階層内の上位ノードすべてから読み込まれた項目の両方を知っています。階層レベルの最後に、論理データベースはプログラムのテーブル作業領域を HEX 00 にリセットします。
また、EXIT または CHECK 命令を使用して GET イベントブロックを強制終了することにより、論理データベースによって読み込まれる深度を変更することができます。GET イベントを強制終了すると、論理データベースは階層内の下位ノードを無視します。
GET イベントブロックで読み込まれるデータ量を制御するには、GET 命令で項目一覧を使用します。これが有効なのは、論理データベース内の関連ノードが項目選択に対して定義されている場合のみです。

論理データベースF1S を使用した読込深度の例:
NODES: SPFLI, SFLIGHT,
SBOOK.
...
GET
SPFLI.
論理データベースは、テーブル SFLIGHT または SBOOK からデータを読み込みません。
NODES: SPFLI,
SBOOK.
...
GET
SBOOK.
テーブルSPFLI と SFLIGHT はノード SBOOK に対するアクセスパスに含まれるため、論理データベースはこれらのテーブルからデータを読み込みます。ただし、プログラムで SFLIGHT からのデータにアクセスすることはできません。
論理データベースを使用すると、各プログラムで選択画面を定義し、データベースからデータを読み込む必要がなくなります。プログラムでデータのリトリーブ方法を指定する必要はなくなり、単にデータを処理して画面に表示するだけでよくなります。
1 つの実行可能プログラムでは 1 つの論理データベースしか使用できませんが、各論理データベースを複数のプログラムが使用することはできます。これは、SELECT 命令を使用してデータベースアクセスを各実行可能プログラムに統合する際に大きな利点となります。つまり、同一のアクセスパスを 1 度だけコーディングすればよくなります。これと同じことは、権限チェックのコーディングにも適用されます。
論理データベースを使用する場合、ほとんどの実行可能プログラムは以下のことによる利点を享受します。
キ 使いやすい標準ユーザインタフェース
キ ユーザ入力の完全性、正確性、妥当性をチェックするチェック機能
キ 有用なデータ選択
キ データベースアクセスに対する中央権限チェック
キ アプリケーションロジックによって決定された階層データビューを保持した、優れた読込アクセスパフォーマンス ( ビューの使用など)
中央論理データベースを使用していても、以下の理由によってプログラム自体はフレキシブルです。
キ 各プログラムに対して独自の選択画面を登録することができます。
キ プログラム内の任意のイベントブロックで、独自の機能をコーディングすることができます。たとえば、選択画面で追加の権限チェックまたは妥当性チェック用のユーザダイアログを書くことができます。
論理データベースを登録、編集、または照会するには、ABAP ワークベンチで論理データベースビルダを使用します ( トランザクション SLDB 、またはツール → ABAP ワークベンチ を選択し、次に開発 → プログラミング環境→ 論理データベース を選択します) 。論理データベースのプログラミングに関する追加情報については、論理データベースセクションを参照してください。