【ABAP】1分で理解するSELECT SINGLE

ABAP

ABAPのSELECT命令の1種「SELECT SINGLE」について解説します。

SELECT SINGLEは、取得元のデータベーステーブルから対象のレコードを1件だけ取得したい場合に用いる命令です。

このページで学べる内容
  • SELECT SINGLEの構文ルールと使い方・意味
  • SELECT SINGLE利用時の注意点
  • UP TO 1 ROWSとの違い

ABAPerであれば、知っておきたい重要な知識ばかりですので、是非最後までご覧ください。

SELECT命令の基本から学びたい方は、以下の記事をご覧ください。

スポンサーリンク
スポンサーリンク

【おさらい】SELECT命令とは?

blank

SELECT命令は、簡単に言うとデータベースからレコードを取り出す際に利用するABAP構文です。

SELECT(テーブルの項目名)
    FROM(テーブル名)
    INTO(内部テーブル or 構造)
(ENDSELECT).


SELECT命令はFROM句に指定したデータベーステーブルからレコードを読み込み、INTO句に記述した内部テーブル or 構造に取得したレコードを格納します。

SELECT SINGLEとは?

SELECT SINGLEは、対象のデータベースから1件だけレコードを取得したい場合に利用します。ここからは、実際のコードルールと、意味・使い方について解説します。

SELECT SINGLE:コードルール

SELECT SINGLE (項目名)
  FROM (テーブル名) 
  INTO (構造).


構文ルールは難しくありません。SELECTの後ろに「SINGLE」と記述するだけです。SELECT SINGLEは、データを1件だけ取得する命令のため、格納先には構造を指定します。

※内部テーブルと構造の違いが不明な方は、以下のページでご確認ください。

SELECT-SINGLE:解説

"SELECT-SINGLE" は対象のテーブルから、レコードを1件だけ抽出し、指定した構造に格納します。

SELECT SINGLE VKORG
  FROM TVKO 
    INTO @DATA(LW_VKORG) 

このコードでは

1行目: VKORG というテーブル項目の値を
2行目: TVKO というテーブルから1件だけ取得し
3行目: LW_VKORG という構造に格納する

処理を行われることになります。もし、取得したい項目が複数ある場合は、以下のように複数の項目を並べて記述します。

SELECT SINGLE VKORG KUNNR BOAVO EKORG
  FROM TVKO 
  INTO @DATA(LW_VKORG) 

上記コードでは、S/4 HANAから登場した変数のインライン宣言という技術が取り入れられています。インライン宣言の詳細は下記のページで解説していますので合わせてご覧ください。

SELECT-SINGLEの注意点

SELECT-SINGLE命令は決して難しい命令ではありません。そのため、使い方や構文ルールで迷う点は少ないはずです。

そのうえで、実際にABAPを書いてみた人しかわからない「落とし穴」もあるのも事実です。以下では、SELECT-SINGLEを利用する場合の注意点を説明します。

一致するデータが何件あっても1件だけしかとらない

SELECT-SINGLEを利用する際に注意すべきは、FROM句で指定したテーブルAに該当するデータが複数件あった場合です。以下のテーブル「TABLE_A」をご覧ください。

blank

該当レコード(取得したいレコード)が複数ある場合でも、取得できるのは1件のみです。該当するデータを1件取得した時点で、処理は終了します。

SELECT文は基本的に上のレコードから順に読み込んで取得していくため、上記例でいえば、二つ目のレコードは取得されません。レコードの読み取りさえ行われません。

SELECT-SINGLEは対象データが1件のみである場合に利用する

上記の留意事項を踏まえ、SELECT-SINGLEを利用する場合は、予め対象のレコードが1件しかないとわかっている場合」「対象のレコードを1件だけ取得すればよい場合に利用することになります。

取得項目が複数ある場合のデータの入り方

以下の構文を見てみましょう。

SELECT SINGLE a b c d
  FROM TVKO 
    INTO LW_VKORG 
    WHERE VKORG = @P_VKORG.

さて、この場合取得した項目a,b,c,dは、構造「LW_VKORG」にどのように入るでしょうか?これ実は結構な落とし穴です。

よくある間違いが「データ型」が同じになる箇所に自動的にはいっていくのでは?というもの。または「項目名」が同じであればそこに自動的にマッピングされるのでは?というもの。

正解は「a,b,c,d」の順に左から順に格納されていきます。つまり、データを入れる先の構造も「a,b,c,d」の順にデータ型を設定しておく必要があります。

ABAPを1から学習したい方は

ABAPを1から学習したい方は、以下の記事をご覧ください。

こちらの記事では、ABAPを用いて簡単な機能を実装できるようにするための必須知識を解説しております。今、本サイトで一番人気の記事ですので是非合わせてご覧ください。

タイトルとURLをコピーしました