ABAPのSELECT-OPTIONSは、単一値だけでなく範囲・複数値・除外条件を入力できる選択項目です。内部ではSIGN、OPTION、LOW、HIGHを持つ選択テーブルとして扱います。LOWだけをイコール条件に使うと、画面で指定した複数条件や除外条件を取りこぼします。
誤りやすい書き方と正しい書き方
DATA gv_carrid TYPE sflight-carrid.
SELECT-OPTIONS s_carr FOR gv_carrid.
" NG: 最初の LOW だけを使い、範囲や除外を無視する
SELECT * FROM sflight
WHERE carrid = @s_carr-low
INTO TABLE @DATA(lt_wrong).
" OK: 選択テーブル全体を条件に使う
SELECT * FROM sflight
WHERE carrid IN @s_carr
INTO TABLE @DATA(lt_flights).
たとえば画面で「AAとLH」「AAからLHまで」「LHを除外」のいずれかを指定しても、IN @s_carrなら選択テーブルの条件を反映できます。= @s_carr-lowではこれらを同じ意味で扱えません。PARAMETERSで定義した単一値なら、イコール条件が適切な場合があります。
空欄と大量指定にも注意
選択条件が空なら「絞り込まない」動作になります。必須の条件なら選択画面で必須にするか、実行前に空欄を検査します。ユーザーが大量の値を入力できる場合は、対象件数、DB負荷、実行時間もテストします。入力形式だけでなく、結果件数と境界値を確認することがバグ防止につながります。
テストする入力例
- 単一値、範囲指定、複数の個別値
- 除外条件を含む組合せ
- 空欄、存在しない値、大量指定
参考・関連記事
- SELECT-OPTIONSで大量指定した場合のエラー:性能・実行時エラーを確認
- ABAPでバグを減らす基本:選択条件のテスト観点
- FOR ALL ENTRIESとJOINの使い分け:データ取得方法を整理