最近PL/SQLについて聞かれることがあったので、昔とった何とかってやつで復習したいと思います。
PL/SQLって?
PL/SQLは米オラクルが開発した、「SQL(Structured Query Language:非手続き型言語)」を“手続き型”言語として拡張したプログラミング言語になります。
PL/SQLを使うことにより、単独のSQLでは実現できない処理や、複雑な処理を容易に実現できます。【WIKI参照】
https://ja.wikipedia.org/wiki/PL/SQL
※MariaDBは10.3からOracle Database互換機能としてPL/SQLをサポートするようになりました。
メリットとデメリット
ここでは、PL/SQLのメリット・デメリットについて語りたいと思います。
メリット
-
パフォーマンスに優れている
PL/SQLを使用しない場合、SQLを発行し対話的にデータ処理を行うことになりますが、Oracle Databaseを使用している環境でPL/SQLを使った場合、PL/SQLの手続き処理とSQL処理をOracle Database上で一緒に行えます。
そのため、他のプログラミング言語に比べて、プロセス間通信のオーバーヘッドやネットワークトラフィックを削減できます。
-
SQLとの親和性が高い
PL/SQLはSQLを拡張したプログラミング言語なのでSQLとの親和性が担保されていますので、プログラム内ではSQLの全ての文や関数などが使用可能です。
データ型もサポートされているために、SQLとPL/SQL間でデータ型の変換作業も不要です。 -
移植性に優れている
PL/SQLで記述されたアプリケーションは、特定のハードウェアやプラットフォームに依存しないのも特徴です。
Oracle Databaseが動作する全ての環境で実行できます。
また、JavaやVBといった言語でも呼び出しが可能なので、言語依存が少ないもの特徴になります。
デメリット
-
オブジェクト指向ではない
PL/SQLは古い言語のため、オブジェクト指向に対応していません。
とはいえ、システム開発を行ってくうえで、継承などのオブジェクト指向の考え方がやはり必要です。
状況に応じて他言語とPL/SQLを使い分ける必要があります。 -
デバッグ環境が弱い
単純な入力ミスもコンパイルするまで発覚しません。
コンパイルエラーが発生しなくても正常に動き、実行結果に問題があった場合はどこに問題があったのか発見しづらいのもあります。
そのためデバッグには経験とセンスが重要になってきます。 -
ユーティリティ不足
必要最低限のユーティリティしか用意されていないため、他の言語に比べて貧弱です。
自分で追加作成するのも容易でないため、すべてをPL/SQLで解決しようと考えないほうがいいです。
PL/SQLの構造
PL/SQLで作成したプログラムを「PL/SQLブロック」と呼び、4つのキーワードで区切られた3つの「部」で構成されています。
DECLARE以降が「宣言部」、BEGIN以降が「実行部」、EXCEPTION以降が「例外処理部」となり、最後のENDでブロックの終了を宣言するという構造です。
-
宣言部(DECLARE~)
宣言部では、ブロック内で使用するオブジェクト(変数やカーソルなど)の定義を記述します。 -
実行部(BEGIN~)
実行部では、SQLによるデータ操作や、手続き処理(反復文や分岐文など)など、実際に行う処理を記述します。 -
例外処理部(EXCEPTION~)
例外処理部では、ブロック内で発生した例外に対する処理を記述します。
ここは他のプログラム言語でもあるので、わかりやすいですね。 -
END
END;で、PL/SQLブロックの終了を宣言します。
基本はこんな感じになります。
機会があれば、また応用編などを投稿したいと思います。