[SAP HANA] SQL(SELECT文)の基礎的な書き方をわかりやすく解説

2027年問題対策に向けて、SAP HANAの開発が多くなっていると思います。

SAP HANAの開発では、SQLの書き方がECCと異なります。書き方を調べようと思っても、情報がまだ少なく、もっと簡単に調べたいと思っている人もいるのではないでしょうか。

本記事では、SAP HANAの基礎的なSQL(SELECT文)の書き方を解説します。

ECCのSQLはSAP HANAでは動かない

SAPの新バージョン、S/4HANAでは、高速データ処理、分析が可能になりました。

SAP HANAでは、膨大なデータを読みこむ際にかかっていた時間を短縮し、より高度な多次元分析ができるようになったと言われています。

そのため、ECCで使用してきたトランザクションが一部廃止になり、データベースも一部結合され、新しいデータベースが作成されています。

今まで身に着けてきたSAP開発のスキルにプラスして、S/4HANAのための知識をつける必要がでてきました。

S/4HANAでABAP開発をするときに、ECCと一番違いが表れるのがSQLの書き方です。

メリットとしては、よりデータ編集や加工ができ、外部結合が複数、連続で定義できるなど、高度データ処理による開発が可能となりました。

では、開発にどのような影響がでるのでしょうか。

ECCで書いてきたSQLのソースコードだと、S/4HANAではエラーとなってしまいます。

また、S/4HANAでは、非構造化データに対応しているため、ECCのようにテーブル構造を扱う必要がなくなりました。

まずは、構造定義ありのSQLの記載方法について、ECCとS/4HANAを見比べてみましょう。

SAP S/4HANA マイグレーションで知っておくべきこと、今からやれること、とは?

S /4 HANAのSQLの書き方は?

最初に、ECCで使用するSQLのソースコードサンプルを記載します。

テーブル構造の作成と、基本的なSELECT文となります

——————————————————————————————————-

*TYPES定義
types: 
begin of typ_data,
  matnr type mara-matnr,
  werks type marc-werks,
  lgort  type mard-lgort,
end of typ_data,   
typ_tb_data type standard table of typ_data.

*DATA定義
data:
  gt_data type typ_data,
  gtb_data type typ_tb_data.
select A~matnr
       B~werks
       C~lgort
from mara as A
inner join marc as B
      on A~matnr = B~matnr
inner join mard as C
      on B~matnr = C~matnr
      and B~werks = C~werks
where A~matnr in s_matnr "選択画面などの変数"
into table gtb_data.

————————————————————————————-

次に、S/4HANAのSQLのソースコードのサンプルを記載します。

S/4HANAの場合、テーブル構造は不要ですが、定義しても問題はありません。

開発現場によっては、テーブル構造を必ず参照することが義務付けられている場合がありますので、ソースコード規約を確認してみてください。

構造を定義した場合の書き方を記載します。

——————————————————————————————————-

*TYPES定義
types: 
begin of typ_data,
  matnr type mara-matnr,
  werks type marc-werks,
  lgort  type mard-lgort,
end of typ_data,   
typ_tb_data type standard table of typ_data.
*DATA定義
data:
  gt_data type typ_data,
  gtb_data type typ_tb_data.

select A~matnr,
       B~werks,
       C~lgort
 from mara as A
 inner join marc as B
            on A~matnr = B~matnr
 inner join mard as C
            on B~matnr = C~matnr
          and B~werks = C~werks
      where A~matnr in @s_matnr  “選択画面などの変数
 into table @gtb_data.

————————————————————————————-

構造定義はECCと変わったところはありませんが、SQL自体に少し変更があります。

書き方の変更点として、下記3つのポイントをまとめました。

組み立てるときに意識してみてください。

1.抽出項目の後ろに「カンマ(,)」を記載する。

select文の後に、項目名を記載しますが、複数項目抽出する場合、必ずカンマを入れてください。

カンマを入れる理由の一つとして、S/4HANAでは、項目値の編集や加工、処理の分岐が可能となったため、命令文が長くなることがあります。

そのため、カンマを入れて区切るようにしたと言われています。

ECCでは不要だったため、ついつい忘れがちになってしまいますが、カンマを入れないと構文エラーになってしまい、処理がうまくいきません。

カンマを入れない場合、下記のような構文エラーが出力されるとこが多いです。

「“XX”は無効な文字含まれるか、または、スペースが1つ欠落しているか多すぎます。」

同じようなエラーが出力された場合は、カンマを入れることを検討してみてください。

複数ある最後の抽出項目に対しては、カンマは必要ありません。

最後の項目にカンマを記載すると、処理が通らなくなるので注意してください。

2.抽出条件で変数を参照する場合、「@」を記載する。

テーブルの結合条件やwhere条件に変数を使用する場合、変数の前に「@」を記載する必要があります。

・固定値(constants命令で定義した固定値変数)

・システム変数(SY-XXXX)

・選択画面で定義した変数

こちらも、ECCには記載する必要がなかったため、忘れないよう意識してください。

「@」を忘れてしまった場合、一般的に、下記構文エラーが出力されます。

「If the new Open SQL syntax is used, it must be used throughout. This includes using @ to escape host variables.」

※ホスト変数のエスケープのため、@を使用する必要がある旨が出力されます。

3.内部テーブルの前に「@」を記載する。

2と同様、into tableの後に記載する内部テーブルも「@」を付与する必要があります。

変数以外に、構造や内部テーブルも忘れずに書くようにしましょう。

今回はselect文について解説していますが、read文でも「@」を記載する必要があるため、全体的に変数、構造や内部テーブルは記載する認識でいると分かりやすいでしょう。

さて、ECCとS4HANAのSQLの記載方法について、構造があるケースで解説しました。

最後に、構造を書かなかった場合のselect文をご紹介します。

————————————————————————————-

select A~matnr,
           B~werks,
           C~lgort
 from mara as A
 inner join marc as B
            on A~matnr = B~matnr
 inner join mard as C
            on B~matnr = C~matnr
          and B~werks = C~werks
      where A~matnr in @s_matnr  “選択画面などの変数
 into table @data(gtb_data).

————————————————————————————

構造を定義しなかった場合、内部テーブル名をカッコでくくり、前に「@data」と記載してください。

「@data」と記載することで、select文の抽出項目通りの内部テーブルが、自動で作成されます。

注意点として、構造定義をしたつもりが、@dataを使用し内部テーブルを自動作成してしまう場合もあります。

後々になって構造を修正した場合、自動で作成された内部テーブルの構造と差異ができてしまうので、構造を使用する場合は参照元をきちんと確認しましょう。

まとめ

SAP HANA SQL(SELECT文)の基礎的な書き方は、いかがでしょうか。

SQLの記載方法について、本記事では基本的なselect文を解説しました。ECCと違い、S4HANAでは抽出項目の編集や加工、外部結合が複数連続で定義が可能になるなど、データ抽出や加工をする上で、できることが多くなりました。

高速データ処理が可能になり、SAPのメリットある、リアルタイムでのデータ参照や分析がより実現できるため、開発する上でも、今までと勝手が違うと感じる人もいるのではないでしょうか。

S/4HANAでは、使用できるトランザクションや、データベースがECCと異なることもあり、開発をする際、最初は慣れないこともあると思います。

SQLはS/4HANAでの開発で大事な部分となりますので、少しずつ理解していきましょう。

これから、バージョンアップや新規導入の現場が多くなります。

今はまだSAPの教材や英語の資料が多く、ネットをみても情報が少ないと感じる人もいると思います。

本記事ではSQLの他にも少しずつSAP HANAについて解説していきます。

パソナテックではSAP S/4HANAマイグレーションを検討する際に欠かせない、考慮すべきポイントをまとめた入門資料「SAP S/4HANAへの道知っておくべきこと、今からやれること、とは?」をご用意しました。本資料は、SAP S/4HANAマイグレーションへ進む方へ必見の資料です。ぜひダウンロードいただき、ご覧ください。

SAP S/4HANA 導入支援サービス 基本ガイドブック
SAP S/4HANA マイグレーションで知っておくべきこと、今からやれること、とは?