ABAPのSELECT-OPTIONSを「= LOW」で検索すると起きるバグと正しい書き方

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負荷、実行時間もテストします。入力形式だけでなく、結果件数と境界値を確認することがバグ防止につながります。

テストする入力例

  • 単一値、範囲指定、複数の個別値
  • 除外条件を含む組合せ
  • 空欄、存在しない値、大量指定

参考・関連記事

関連記事

PAGE TOP