SAPで使うOPEN SQLとネイティブSQLの違い
INDEX LINK
はじめに
SAP ERPでABAPを扱うと、「SQLの使いやすさ」に気が付くと思います。
ABAPはオープンSQLを使うことができるので、データベースの操作がとても楽ですよね。
ここで注意したいのが、「ネイティブSQL」との違いです。
ABAPだけを触っていると、意外とOPEN SQLとネイティブSQLの違いに気が付きません。
そこで今回は、ABAPでのデータベース操作におけるオープンSQL/ネイティブSQLについて解説します。
1.OPEN SQLとは?
OPEN SQLは、SAPのABAP言語に組み込まれているSQLのサブセットで、データベースに依存しない汎用的なSQLコマンドを提供します。
OPEN SQLでは、さまざまなデータベースシステム(SAP HANA, Oracle, Microsoft SQL Serverなど)での互換性が保たれています。
つまり、開発者は特定のデータベースのSQL文法について心配することなく、一貫したコードを書くことができます。
そのほかにも以下のようなメリットがあります。
・クライアント(環境)を意識する必要がない
SAPシステムは複数のクライアント(環境)で構成されているのが通常です。
したがって、本来ならばSQLもクライアントを考慮して発行すべきです。
しかし、OPEN SQLでは発行する際にクライアントを指定しない限り、自動的に「現在のクライアント」でデータ処理が行われます。
見方を変えれば作業ミスにつながりそうですが、単純にコーディングの労力が減るのでとても便利です。
・ABAP標準の構文チェックでミスを防げる
OPEN SQLはSQLでありながら「ABAPの一部」でもあるため、標準の構文チェック機能が利用できます。
ネイティブSQLのように「専用の領域」で動作するわけではないので、構文チェックをそのまま使えるのです。
パラメータ指定などにミスがないかを自動チェックできるので、こちらも非常に便利ですね。
・バッファリング済みのテーブルが利用できる
テーブルバッファリングとは、データベース上のレコードをアプリケーションサーバ上に複製しておくことを指します。
簡単に言えばデータベースのバッファですね。
テーブルバッファリングを使用すると、データベースサーバ上で処理を行わなくてよくなるのです。
つまり、アプリケーションサーバ上で処理を行えるため、動作が非常に高速になるというメリットがあります。
・基本的な処理が対象
ただし、OPEN SQLはネイティブSQLほど高度な動きはできません。
主にCRUD(Create, Read, Update, Delete)操作に使用されます。
データベース固有の複雑な機能や最適化には使われないのです。
汎用性は高いものの、パフォーマンスや柔軟性においては制限があるツールと言えるでしょう。
2.ネイティブSQLとは
ネイティブSQLは、データベースシステム固有のSQ文法を直接利用することを指します。
データベースインターフェースを介さず、直接データベースを操作します。
ネイティブSQLを使用するメリットは、何といってもデータベースの全機能を活用できることですね。
OPEN SQLでは利用できない高度な処理が実行できるので、効率的でパワフルな操作が可能です。
ただし、ネイティブSQLで書かれたコードは特定のデータベースに依存するため、異なるデータベースでは使えないことが多いです。
この点はOPEN SQLのほうが上ですね。
3.OPEN SQLとネイティブSQLの違い
2つのSQLの違いは「データベースインターフェースを介すかどうか」です。
OPEN SQLはデータベースインターフェースを介しますが、ネイティブSQLは使いません。
3-1.データベースインターフェースとは?
データベースインターフェースとは、簡潔に言えば、アプリケーションサーバとデータベースサーバ間での「通訳者」としての役割を果たす機能です。
SAPは、「Microsoft SQL Server」や「Oracle」を含む多様なデータベースをサポートしています。
また、一部マイナーなデータベースも含めると多種多様なデータベースが利用可能です。
したがって、本来であれば各データベースに適したSQLを発行する必要があります。
しかし、毎回データベースに合わせてSQLを利用することは非効率です。
各データベースの特性に合わせて細かな調整が必要ですし。
この調整を簡略化するのがデータベースインターフェースです。
アプリケーションサーバからの命令を、どのデータベースにも適用可能な形式に翻訳するので、使用しているデータベースの種類を意識することなく、データの取得や編集といった処理を行えます。
インターフェースはOPEN SQLが持つ最大の特徴であり強み、と言えるでしょう。
4.ABAPerもネイティブSQLを学ぶべきか?
結論から言うと、「知っておいたほうが開発スキルは伸ばしやすい」ですね。
簡素な開発であれば、OPEN SQLのみで十分です。
基本的なデータ処理しかできないとはいえ、大抵のアドオンプログラムで必要な処理には十分対応できますから。
しかし、ABAPディクショナリ以外のデータベーステーブルを利用したい場合には、ネイティブSQLを使わざるを得ません。
例えば、SAP ERPシステム外のデータを結合したい場合には、OPEN SQLではなくネイティブSQLを使います。
命令文「EXEC SQL.~ENDEXEC」を使用するわけですが、構文としては簡単です。
しかし、ネイティブSQLという選択肢自体が頭にないと使えませんし、設計にも盛り込めません。
設計フェーズを担当するレベルになると当然知っているはずなのですが、やはり普段から使い慣れているかどうかで正確さや作業スピードが変わってきます。
なので、最初はOPEN SQLから学び、徐々にネイティブSQLも扱えるようにスキルを伸ばしていきましょう。
SQLに関するリファレンスは日本語でも豊富に存在するので、それほど苦労はしないはずです。
まとめ
今回はABAPerの基本スキルであるOPEN SQLとネイティブSQLの違いについて解説しました。
ABAPerはOPEN SQLのみを使うことが多いと思いますが、ネイティブSQLにも精通しておくと、開発の幅が広がります。
初心者レベルのうちは、2つのSQLをしっかり使いこなせるように努力していきましょう。