【ABAP】5分で理解できるオープンSQL/ネイティブSQLの違い

ABAP

「オープンSQL」と「ネイティブSQL」とは何か?

ABAPでは、データベースを操作する方法としてオープンSQLとネイティブSQLの2つに大別されます。実はこの2つの違いは、熟練ABAPerでも意外と説明できません

本ページでは、ABAPでデータベース操作を行う基礎となるオープンSQL/ネイティブSQLという概念について初心者向けに分かりやすく解説します。ソースコード自体は、この2つの違いを理解していなくても書くことは可能ですが、知っているとSAPの仕組みを理解できるようになります。

このページで学べる内容
  • オープンSQLとは?
  • データベースインターフェースの仕組み
  • ネイティブSQLとの違い
  • オープンSQLのメリット・デメリット

SAPエンジニアを目指す方であれば、知っておいて損はない重要知識ですので、是非最後までご覧ください。

それでは早速解説を始めます。

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

オープンSQLとは?

オープンSQLとは、ABAPとデータベース間に存在するデータベースインターフェースという機能を介して、データベースを操作するSQLのことです。

blank

ネイティブSQLとの違いは、データベースインターフェースを介すか介さないかの違い。この1点のみです。

データベースインターフェースとは?

翻訳, Web, サービス, 言語, 英語, 通訳, 多言語, E ラーニング, 情報, 教育, 外国

それでは、データベースインターフェースとは一体どのような機能なのでしょうか?簡単に言えば、データベースインターフェースとは、アプリケーションサーバとデータベースサーバの「翻訳機」のような機能です。

SAPの"データベース"と一言にいっても、SAPがサポートするデータベースは多岐にわたります。代表的なもので「Microsoft SQL Server 」や「Oracle 」などがありますが、その他にもIBM製のデータベースなど複数存在しています。

したがって、本来はそれぞれのデータベースサーバの分類に応じて発するべき命令(SQL文)も製品に合わせて微妙に調整が必要になります。

そんな面倒を解決してくれるのが「データベースインターフェース」です。データベースインターフェースは、アプリケーションサーバから発せられる命令を「どのようなデータベースにも通じる言語へと翻訳」します。

したがって、どんなデータベースサーバを使っていたとしても、このデータベースインターフェースを通せば、特段データベースサーバの分類を意識せずに目的とするデータを取ってきたり、編集することが可能となります。

オープンSQLを利用することのメリット4選

ABAPにおけるSELECT文INSERT文などはすべてオープンSQLに分類されます。

わざわざネイティブSQLを利用するメリットがあまり存在しないことから、通常はオープンSQLでデータベース操作を行う場合が圧倒的多数。ここでは、オープンSQLとネイティブSQLの違いを比較しながら、オープンSQLのメリットを解説します。

オープンSQLのメリット
  • データベースに依存しないSQLの記述が可能
  • テーブルバッファリングが利用可能
  • クライアントを意識する必要がない
  • ABAPの構文チェック機能が利用できる

1つ1つ、メリットを深堀して解説します。

データベースに依存しないSQLの記述が可能

まず、1つ目。オープンSQLには、データベースに依存せずに命令を発することができるという利点があります。

オープンSQLでは、発せられた命令はデータベースインターフェースを通して自動的に各データベースに合致するSQL文に翻訳されてから、データベースサーバに送信されます。

画像に alt 属性が指定されていません。ファイル名: 37b0372c73fa27e3c1c73f34708ce298.png

したがって、オープンSQLで動作するABAPプログラムはデータベースに依存しません。後述しますが、ネイティブSQLのようにわざわざシステムの調整を行う必要がありません。

テーブルバッファリングが利用可能

オープンSQLでは、バッファリングされたテーブルからデータを読み込むことができます。

したがってデータベースサーバの負荷を減らし、読み取り速度を大幅に向上させることができます。

テーブルバッファリングとは?

簡単に言えば、テーブルバッファリングとは、データベース上のレコードをアプリケーションサーバー上にミラーリング(複製)しておくこと。

データベースサーバで処理を行う必要がなく、アプリケーションサーバー上でレコードの処理を行うので、パフォーマンス(処理速度)が大幅に向上するSAPの仕組みです。

詳しくは、以下の記事で詳しく解説しております。

クライアントを意識する必要がない

SAPシステムは複数のクライアントで構成されています。したがって、データベースサーバも様々なクライアント依存のデータを保有します。

ネイティブSQLでは、SQLを記述する際にどのクライアントに対する命令なのか?を明示する必要があるのに対して、オープンSQLはその必要がありません。

オープンSQLでは、クライアントを明示的に指定する必要はなく、データベースインターフェースがうまく調整してくれます。

ABAPの構文チェック機能が利用できる

オープンSQLはABAP言語の一部という位置づけです。つまり、ABAPの構文チェック機能を利用することが可能です。(その分コーディングミスが減ります。)

一方で、ネイティブSQLは、ABAPの一部という位置づけではありません。ネイティブSQLを利用する際は、ABAP命令で「ネイティブSQL用」のプログラム領域を作り、その領域の中でネイティブSQLが動作する形となるため、ネイティブSQLでは構文チェック機能を利用することができません

オープンSQLの弱点

オープンSQLは、なんでもやってくれるできるやつ、みたいな印象ですが、唯一「権限チェック」だけは自動的に行ってくれません

そのため、権限チェックのみは、プログラムで明示的に実行する必要があるので、注意です。

ネイティブSQLのメリット

では、逆にネイティブSQLを利用するのはどのようなシーンでしょうか?

ネイティブSQLを利用するには、データベース製品ごとの特性や制約を踏まえてコーディングする必要があるため、基本は避けたい記述方法ですが、実はネイティブSQLでしか実現できないことも存在します。

その代表例が、ABAPディクショナリで定義していないテーブルの操作です。

オープンSQLでは実現不可能な処理もできる

例えば、SAPと他システムが共存しているような業務システムの場合。

ネイティブSQLを利用すれば、直接他システムのデータベースを操作することが可能になります。システム間のインターフェースや、データレプリケーションなどの機能を実現する場合にネイティブSQLが利用されます。

つまり、ABAPディクショナリで登録されていないテーブルに対する操作を行う1つの方法としてネイティブSQLが利用されるということ。ただし、やはりそれ以外の場合では、できるだけオープンSQLを利用するのが簡単ですし可読性の高いソースコードとなるため、基本はオープンSQLを利用するのが鉄則です。

ABAP/SAPを1から勉強したい方は

ABAP/SAPを1から学習したい方は、以下の記事で学習するのがお勧めです。

現在、完全無料で公開しておりますので、是非ご覧ください!

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