オープンSQL(OpenSQL)とネイティブSQL(NativeSQL)とは何か?何が違うのか?
本ページでは、ABAPにおけるデータベース操作の際に必要となるオープンSQL/ネイティブSQLという基本知識について初心者向けに分かりやすく解説します。
初心者のうちはオープンSQLだけ知っておけば困ることはありませんが、ABAPerとして知っておきたい重要な内容です。
SAPエンジニアを目指す方であれば、知っておきたい重要知識です。是非最後までご覧ください。
オープンSQL(OpenSQL)とは?
オープンSQL(OpenSQL)とは、ABAPとデータベース間に存在するデータベースインターフェースという機能を介してデータベースを操作するSQLのことです。
ネイティブSQLとの違いは、データベースインターフェースを介すか介さないかの違い。この1点のみです。
データベースインターフェースとは?
それでは、データベースインターフェースとは一体どのような機能なのか?簡単に言えば、データベースインターフェースとは、アプリケーションサーバとデータベースサーバの「翻訳機」のような機能です。
SAPの "データベース" と一言にいっても、SAPがサポートしているデータベースは多岐にわたります。代表的なもので「Microsoft SQL Server 」や「Oracle 」などがありますが、その他にもマイナーなデータベースまで幅広く利用することが可能です。
したがって、本来はそれぞれのデータベースサーバの分類に応じて発するべき命令(SQL文)も製品に合わせて微妙に調整が必要になります。
そんな面倒を解決してくれるのがデータベースインターフェースです。データベースインターフェースは、アプリケーションサーバから発せられる命令を「どのようなデータベースにも通じる言語へと翻訳」します。
どんなデータベースサーバを使っていたとしても、このデータベースインターフェースを介せば(つまりOpenSQLを利用すれば)、特段データベースサーバの分類を意識せずに目的とするデータを取ってきたり、編集することが可能となります。
オープンSQL:5つのメリット
ABAPにおけるSELECT文やINSERT文などはすべてオープンSQLに分類されます。
わざわざネイティブSQLを利用するメリットがあまり存在しないことから、通常はオープンSQLでデータベース操作を行う場合が圧倒的多数。ここでは、オープンSQLとネイティブSQLの違いを比較しながら、オープンSQLのメリットを解説します。
1つ1つ、メリットを深堀して解説します。
メリット1:データベースに依存しないSQL
まず、1つ目。オープンSQLには、データベースに依存せずに命令を発することができるという利点があります。
オープンSQLでは、発せられた命令はデータベースインターフェースを通して自動的に各データベースに合致するSQL文に翻訳されてから、データベースサーバに送信されます。
したがって、オープンSQLで動作するABAPプログラムはデータベースに依存しません。後述しますが、ネイティブSQLのようにわざわざデータベースごとの調整を行う必要がありません。
メリット2:テーブルバッファリングが利用可能
オープンSQLを利用すれば、バッファリングされたテーブルからデータを読み込むことができます。
逆に言えば、ネイティブSQLの場合はテーブルバッファリングの仕組みを利用することができないということです。
したがってデータベースサーバの負荷を減らし、読み取り速度を大幅に向上させることができます。
簡単に言えば、テーブルバッファリングとは、データベース上のレコードをアプリケーションサーバー上にミラーリング(複製)しておくこと。
データベースサーバで処理を行う必要がなく、アプリケーションサーバー上でレコードの処理を行うので、パフォーマンス(処理速度)が大幅に向上するSAPの仕組みです。
詳しくは、以下の記事で詳しく解説しておりますので合わせてご覧ください。
メリット3:クライアントを意識する必要がない
OpenSQLのメリットの2つ目は、クライアントを意識する必要がないという点です。
SAPシステムは複数のクライアントで構成されているため、本来であればSQLもクライアントを意識して発行する必要があります。
つまり、どのクライアントのデータなのか?を意識する必要があるということ・・・。
その区別を行う必要がない点でOpenSQLに利があります。
OpenSQLを利用すれば、明示的に処理対象のクライアントを指定しなければ、自動的にプログラムが実行されるクライアントに紐づくデータの処理(自動クライアント処理)が行われます。
SAPでは、1つのシステム上に複数の環境を定義することができます。この複数の環境をSAPではクライアントと呼びます。
ネイティブSQLを利用する場合、SELECTしたいデータはどのクライアントのデータであるか?を必ず指定する必要があります。
メリット4:ABAPの構文チェック機能が利用できる
オープンSQLはABAP言語の一部という位置づけです。つまり、ABAPの構文チェック機能を利用することが可能です。(その分コーディングミスが減ります。)
一方で、ネイティブSQLは、ABAPの一部という位置づけではありません。ネイティブSQLを利用する際は、ABAP命令で「ネイティブSQL用」のプログラム領域を作り、その領域の中でネイティブSQLが動作する形となるため、ネイティブSQLでは構文チェック機能を利用することができません。
メリット5:LUW
OpenSQLを利用することで、データの整合性の維持が比較的容易になります。SAPが用意しているデータ担保の仕組みを介することが可能です。
ネイティブSQLのメリット
では、逆にネイティブSQLを利用するのはどのようなシーンでしょうか?
ネイティブSQLを利用するには、データベース製品ごとの特性や制約を踏まえてコーディングする必要があるため、基本は避けたい記述方法ですが、実はネイティブSQLでしか実現できないことも存在します。
その代表例が、ABAPディクショナリで定義していないテーブルの操作です。
ネイティブSQLのメリット:オープンSQLではできないことができる
例えば、SAPと他システムが共存しているような業務システムの場合。
ネイティブSQLを利用すれば、直接他システムのデータベースを操作することが可能になります。システム間のインターフェースや、データレプリケーションなどの機能を実現する場合にネイティブSQLが利用されます。
直接対抗システムのデータベースにINSERTしたりDELETEしたり、ということができます。
つまり、ABAPディクショナリで登録されていないテーブルに対する操作を行う1つの方法としてネイティブSQLが利用されるということ。ただし、やはりそれ以外の場合では、できるだけオープンSQLを利用するのが簡単ですし可読性の高いソースコードとなるため、基本はオープンSQLを利用するのが鉄則です。
SAP / ABAPを1から学習したい方は
初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!