!--a11y-->
次の文を使用します。
SELECT-OPTIONS <seltab> for <f>.
これにより、データベーステーブルの <f> 列、またはプログラムの内部<f> 項目にリンクされた選択テーブルを、プログラム内で宣言できます。選択テーブルは、標準テーブル型の内部テーブルオブジェクトであり、標準のキーとヘッダ行を持ちます。選択テーブルは、標準化したプロシージャによって、複合選択を保管するために使用します。これには、いくつかの使用方法があります。主な用途は、Open SQL 文で WHERE 追加オプションを使用して、選択基準をデータベース選択に直接変換することです。
SELECT-OPTIONS の使用による選択テーブルの作成だけでなく、RANGES 文を使用すると、選択テーブルの構造を持つ内部テーブルを作成できます。これらのテーブルは、実際の選択テーブルを使用する場合と同じ方法で、特定の制限を設けて使用できます。
選択テーブルの行の型は、SIGN 、OPTION 、LOW 、およびHIGH の 4 つのコンポーネントから成る構造です。選択テーブルにおいて、値を持つ各行は、完全な選択基準に対する副条件を表します。以下は、各コンポーネントの説明です。
キ SIGN
SIGN のデータ型は C 、長さは 1 です。SIGN の値は、各行に対し、行条件の結果を検索結果の全行に含めるか、または排除するかを定義します。有効値は I および E です。
- I は “inclusive ( 包含)” を表します ( 包含基準 - 演算子を転換しない) 。
- E は “exclusive ( 排他)” を表します ( 排他基準 - 演算子を転換する) 。
キ OPTION
OPTION のデータ型は C 、長さは 2 です。OPTION は、選択演算子を表します。以下の演算子を利用できます。
- HIGH が空白の場合は、EQ 、NE 、GT 、LE 、LT 、CP 、および NP を使用できます。これらの演算子は、論理式に使用されるものと同じです。ただし、CP および NP 演算子は、通常の論理式で使用される完全な機能範囲を持ちません。これらは、入力項目にマスキングフラグ ('*' または '+') が使用された場合にのみ使用できます。選択画面にマスキングフラグが入力されると、CP 演算子が自動的に使用されます。エスケープ文字は # として定義されています。
- HIGH に値が設定されている場合は、BT (BeTween) および NB (Not Between) を使用できます。これらの演算子は、項目が範囲に属するかどうか をチェックするために使用するBETWEEN および NOT BETWEEN に対応します。マスキングフラグを使用することはできません。
キ LOW
LOW のデータ型は、選択基準がリンクされているデータベーステーブルの列型と同じです。
- HIGH が空白の場合は、LOW の値は単一項目の比較を定義します。OPTION の演算子での比較によって、データベース選択の条件を指定します。
- HIGH に値が設定されている場合は、LOW および HIGH の値によって、範囲の上限および下限が決まります。この範囲は、OPTION の演算子との組合せによって、データベース選択の条件を指定します。
キ HIGH
HIGH のデータ型は、選択基準がリンクされているデータベーステーブルの列型と同じです。HIGH の値は、範囲選択の上限を指定します。
選択テーブルに複数の行が含まれている場合は、完全な選択基準の作成において、以下の規則が適用されます。
...
1. SIGN 項目の値が I ( 包含) となる行で定義された結合セットを形成。
2. SIGN 項目の値が E ( 排他) となる行で定義された結合セットを除去。
3. 選択テーブルに、SIGN 項目が E の行しか含まれない場合は、行に指定されたセット以外の全データが選択されます。
TYPES および DATA 文の以下のバリアントを使用すると、選択テーブルと同じ型の内部テーブルを作成できます。
TYPES|DATA <rangetab> TYPE RANGE OF <type>.
または
TYPES|DATA <rangetab> LIKE RANGE OF <obj>.
これにより、行型が以下の構造となる内部標準テーブルが定義されます。
キ SIGN(1) TYPE C
キ OPTION(2) TYPE C
キ LOW TYPE <type> bzw.LIKE <obj>
キ HIGH TYPE <type> bzw.LIKE <obj>
RANGES 文を使用しても、選択テーブルと同じ型の内部テーブルを作成できます。
RANGES <rangetab> FOR <f>.
この文は、単に次の文の簡略形です。
DATA: BEGIN OF <rangetab> OCCURS 0,
sign(1) TYPE c,
option(2) TYPE c,
low LIKE
<f>,
high LIKE <f>,
END OF <rangetab>.
この文は、ヘッダを持つ内部テーブルを定義する以前の方法を示したもので、現在ではヘッダを使用すべきではありません。したがって、RANGES ではなく、TYPES および DATA 文の上記のバリアントを使用してください。
この方法で定義するテーブルは、選択テーブルと同じ構造を持ちますが、その機能は異なります。このようなテーブルは、選択画面の一部ではありません。対応する入力項目は生成されず、次の文を使用して呼び出した<prog> プログラムにおいて、これらのテーブルをデータインタフェースとして使用することもできません。
SUBMIT <prog> WITH <rangetab> IN <table>.
しかし、上記の文を使用すると、呼出元プログラムで<table> テーブルを作成できます。こうしたテーブルの主要機能は、実行可能プログラムを呼び出したときに、選択画面を表示せずにデータを実際の選択テーブルに渡すことです。
上記のテーブルは、Open SQL 文の WHERE 句の実際の選択テーブルと同様であり、論理式で IN 演算子と組み合わせて使用できます。しかし、データベーステーブルにはリンクされません。このテーブルには、以下の特性があります。
キ 選択基準として論理データベースに渡されない
キ 論理式の選択テーブルの簡略形として使用することができない
キ GET イベントで選択基準 として使用できない

廃止されたバージョン:
REPORT demo_sel_screen_tables_ranges.
RANGES s_carrid1 FOR spfli-carrid.
s_carrid1-sign = 'I'.
s_carrid1-option = 'EQ'.
s_carrid1-low =
'LH'.
APPEND s_carrid1.
SUBMIT demo_selection_screen_ldb_1 WITH carrid IN s_carrid1
VIA SELECTION-SCREEN AND RETURN.
修正されたバージョン:
REPORT demo_sel_screen_tables_ranges.
DATA: s_carrid2 TYPE RANGE OF
spfli-carrid,
s_carrid2_wa LIKE LINE OF s_carrid2.
s_carrid2_wa-sign =
'I'.
s_carrid2_wa-option = 'EQ'.
s_carrid2_wa-low =
'AA'.
APPEND s_carrid2_wa TO s_carrid2.
SUBMIT demo_selection_screen_ldb_1 WITH carrid IN s_carrid2
VIA SELECTION-SCREEN AND RETURN.
S_CARRID 選択テーブルは、データベーステーブル SPFLI の CARRID 列への参照とともに作成されます。S_CARRID-LOW および S_CARRID-HIGH 項目は、CARRID と同じ型となります。S_CARRID 内部テーブルの作業領域には値が設定され、テーブルにアペンドされます。DEMO2 プログラムが呼び出されます。DEMO2 が F1S 論理データベースにリンクされている場合は、DEMO2 の選択画面には、この論理データベースの CARRID 選択基準の項目が表示されます。これらの項目には、内部テーブルの内容が設定されます。