【ABAP】SELECT-SINGLE―押さえておきたい2つのポイント

ABAP

以前解説したSELECT-SINGLE命令の補足編をポイントを2つに絞り解説します。そもそものSELECT-SINGLE構文を知りたい!という方は、まずは以下のページを読んでから戻ってきてください。

また、今さら、、、と思うかもしれませんが、改めて構造とテーブルの違いも知っている必要があります。下記にリンクを貼っておきますので、合わせてお読みください。

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

SELECT-SINGLEのINTO句は「構造」を指定する

以前の解説で以下のコードを解説しました。

SELECT SINGLE VKORG
FROM TVKO 
INTO @DATA(LW_VKORG) 
WHERE VKORG = @P_VKORG.

詳しい解説は既に行っているので、ここでは省きます。

以前の解説では、INTO句の後に「構造」を指定すると説明しました。が、何故ここは必ずテーブルではなくて構造となるのでしょうか

もちろん、内部テーブルを定義しても処理中にエラーにはなりません。改めて説明すると、SELECT-SINGLEは「条件に一致するデータが何件あっても最初の1行しか取得しない」のでした。

したがって、指定するのは「構造」で十分ということになります。テーブルを指定しても良いのですが、その場合メモリ領域を不要に確保してしまうので、プログラム全体のパフォーマンス低下につながります。不要なメモリを開放する意味も込めて、SELECT-SINGLEの場合はINTO句の後には「構造」を指定するようにしましょう。

もっとも、今回のコード例ではインライン宣言をしているので、勝手に構造になってくれるので、例自体の問題はありません。


項目は左から順番に格納される

何のことか分かりますか?

早速以下のコードを見てみましょう。

SELECT SINGLE a1 a2 a3 a4
FROM test001 
INTO LW_TEST 
WHERE a1 = b1.

上記コードは、test001テーブルの項目4つ(a1~a4)のうち、a1=b1の条件を満たすデータをLW_TESTに格納するというコードです。

ここで、問題です。

さて、構造 LW_TEST には、どのようにa1~a4が入ることになるでしょうか?答えは、見出しの通り、「a1~a4に順に格納される」です。

よくある間違いが、例えば構造名を分類しておけばいいのでは?というケース。
これ、構造の名称ごとには入りません。

データ型に合わせて入ってくれるのでは?というケース。
データ型に合わせて入ってくれません。

最後に

もし、SELECT-SINGLEに関する質問や不明点があれば本ページにてアップデートさせていただきます。これからもご愛読いただけると記事作成の励みになりますので、どんどんコメントをお寄せ下さい。お待ちしております。

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