追加テーブルの割当 

論理データベーステーブルに追加テーブルを定義するときは、次の手順にしたがってください。

  1. ジャンプ 補足を選択して、論理データベーステーブルの補足ウィンドウを呼び出します。
  2. 登録を選択します。
  3. 追加テーブル、追加項目、またはコードのどれを定義するかを選択する、別のダイアログボックスが表示されます。

    続いて、変更機能により該当する更新画面が自動的に表示されます。ダブルクリックするだけでトリガすることもできます。

  4. 追加テーブルを選択し、テーブル名を入力します。 ABAP ディクショナリにあるすべてのテーブル名、または機能分野に対してエイリアステーブルとしてすでに宣言されているテーブル名を使用することができます ( 後出の 追加テーブルの複数割当を参照してください )

ABAP クエリにより、適切な SELECT 命令が別のダイアログボックスで生成され、論理データベーステーブルに対する GET イベントのどこにその命令を入れるか提案されます。この順序は、たとえば同じ論理データベーステーブルに割り当てられた別のテーブルの SELECT 命令のキーとして SELECT 命令から値を導くテーブル項目を使用する場合に重要です。

すべてのキー項目に値を指定する必要があるので、指定したテーブルのキー項目は常に表示され、多くの場合にはデフォルト値が提案されます。たとえば、言語キーには常に SY-LANGU が提案されます。しかし、このようなデフォルト値が有用でないことも多く、その場合はキー項目の値を自分で指定する必要があります。

次の図に、デフォルト値を使用した SELECT 命令を示します。

追加テーブルに対して内部バッファオプションを使用するかどうかを決めます。

このオプションは、クエリのパフォーマンスを改善するために使用することができます。このオプションを選択すると、この追加テーブルを使用するすべてのクエリで、その追加テーブルから読込んだレコードが内部テーブルに保存されます。テーブルからのレコードが必要な場合、レコードがすでに内部テーブルに存在するかどうかが最初にチェックされます。レコードが内部テーブルに存在しない場合は、 SELECT SINGLE 命令によってそのレコードがデータベースから読込まれ、内部テーブルに挿入されます。内部バッファを使用すると、クエリが実行されるたびに追加テーブルレコードが 2 回以上読込まれることを防ぐことができます。

内部バッファは、クエリ処理時に追加テーブルレコードが複数回読込まれると予想される場合に限って使用しなければなりません。それ以外の場合は、内部テーブルがメモリスペースを消費するので、このオプションの使用は避ける必要があります。さらに、多数の項目を含む非常に大きなテーブルの場合、内部テーブルを使用して節約される時間が保管に必要なメモリスペースの量と比べて妥当なものかどうか検討する必要があります。

このハンドブックで例として使用している論理データベース F1S では、テーブル SPFLI に出発空港と到着空港という 2 つの項目が存在します。いずれの項目にも、空港に関するテキスト ( ) を含むテーブル SAIRPORT のキーが含まれています。このような場合、 SAIRPORT にあるレコードが何回も読込まれると考えるほうが安全なため、追加テーブルを内部的にバッファする必要があります。

デフォルト値を含まないすべてのキー項目の値を、ここで指定する必要があります。もちろん、デフォルト値を上書きすることができます。

この目的のために、項目 ( たとえば SY-LANGU) 、数値リテラル ( たとえば 34) 、テキストリテラル ( たとえば "D") 、またはパラメータを使用することができます。

追加テーブルが読込まれるときに、キー項目に割り当てる項目がどれも有効な値を持っているかを十分にチェックしてください。 SAP クエリでは、チェックの実行を容易にするため、以下の項目だけが許可されています。

たとえば、追加テーブルを論理データベース F1S のテーブル SFLIGHT に割り当てる場合には、テーブル SPFLI およびテーブル SFLIGHT の項目を使用することができます。テーブル SPFLI に割り当てられた追加項目だけでなく、追加テーブルの項目にもアクセスすることができます。

この場合、 SAP クエリが追加テーブルを正しい順序で読込むようにしなければなりません。

この場合、追加項目に関連するすべての計算が、追加テーブルにアクセスする前に実行されることを確認する必要があります。

追加テーブルチェックを選択して、 SELECT 命令の構文エラーをチェックすることができます。この方法を使用しない場合は、機能分野全体に機能 チェックおよび生成を使用する場合に限りエラーを訂正することができます。

追加テーブルの編集画面が表示されているときには、いつでも以下の設定を変更することができます。

ただし、論理データベーステーブルへの割当を変更することはできません。追加テーブルを異なる論理データベーステーブルに割り当てるには、最初にそれを削除してから、再び割り当てる必要があります。

追加テーブルの複数割当 ( エイリアステーブル )

上述の手順を使用すると、テーブルを追加テーブルとして 1 回だけ機能分野にリンクすることができます。そのテーブルを 2 回目に追加テーブルとしてリンクしようとすると、テーブルは 1 回しか使用できないというエラーメッセージが表示されます。しかし、以下の例はテーブルの複数リンクが便利なことを示しています。

このハンドブックで例として使用している論理データベース F1S では、テーブル SPFLI に出発空港と到着空港という 2 つの項目が存在します。いずれの項目にも、空港に関するテキスト ( ) を含むテーブル SAIRPORT のキーが含まれています。テーブル SAIRPORT を追加テーブルとして SPFLI 1 回だけリンクできる場合、これらの 2 種類の空港エントリのうち一方のテキスト ( ) だけにアクセスすることができます。もう一方の空港エントリのテキスト ( ) は別の方法で決定しなければなりません ( 追加項目を使用 )

追加テーブルとしてリンクするテーブルが論理データベースに属している場合も、同様な問題が発生します。この場合も、このテーブルは 1 回しか使用できないというエラーメッセージが表示されます。

しかし、エイリアステーブルを使用するとテーブルを複数回リンクすることができます。

テーブルに複数のエイリアス名を割り当て、後でそのエイリアス名を使ってテーブルを呼び出すことができます。

テーブルのエイリアス名を定義する場合は、次の手順にしたがってください。

  1. ジャンプ エイリアステーブルを選択します。
  2. エイリアス名が参照するディクショナリテーブル定義を含め、既存のエイリアス名をすべて表示するウィンドウが表示されます。 1 つの機能分野内では、同じエイリアス名を繰り返し使用することはできません。エイリアス名は常にディクショナリテーブル定義を直接参照しなければならず、他のディクショナリ定義の名称と同じであってはいけません。

    エイリアステーブル機能は、多くのダイアログボックスで押ボタンとしても表示されます。

  3. 画面の左下隅から、登録を選択します。

別のウィンドウが表示され、エイリアス名と、ディクショナリからの関連テーブルの名称を入力することができます。

エイリアス名を削除するには、カーソルをエイリアス名の一覧にある該当のエントリに合せて、削除を選択します。エイリアステーブルが機能分野で使用されていない場合に限って削除を行うことができます。

テーブルを機能分野で追加テーブルとして 2 回以上リンクするには、次の手順にしたがってください。

  1. テーブルをオリジナルの名称で 1 回リンクします。
  2. テーブルにエイリアス名を定義します。
  3. このエイリアス名を使用して、テーブルを追加テーブルとして再びリンクします。

このテーブルの項目はその機能分野に同じテキスト ( ) およびヘッダで 2 度表示されることに注意してください。そのため、テーブルを複数回リンクする場合、通常その項目のテキスト ( ) とヘッダは、 1 つの機能グループに割り当てるたびに変更しなければなりません。