- 更新日: 2022年06月06日
- 公開日: 2017年02月23日
OracleとSQLを覚えた?それならPL/SQLも覚えよう
PL/SQL。データベース管理システムの1つであるOracleに関わっている人なら、耳にしたことがあるのではないでしょうか? Oracleの言語なのでそれほどメジャーとはいえないかもしれませんが、ゆくゆくは大規模システムに携わりたいと考えているのであれば、覚えておいて損はない言語です。
PL/SQLの特徴を簡単にご紹介します。
PL/SQLとは
(開発ツールの一つ、Oracle SQL Developer)
PL/SQL(PLはProcedural Languageの略)は、SQLの手続き型(※1)拡張機能としてOracle社が提供する言語です。同社のデータベース管理システム(DBMS)であるOracle Databaseと組み合わせて使用します。以降、Oracleと表記する場合にはデータベース管理システムのことを指します。
Oracleからデータを取得するにはSQL文を用いますが、システムによってはSQL文だけでは機能が不足する場合があります。PL/SQLはOracle内部でSQLと連携し、SQLではできない処理を効率的に実行します。プログラムの見た目は、SQL文と、データ型やステートメントが入り混じったような形になります。
(※1)手続き型プログラミング
記述された命令を逐次的に実行し、処理の結果に応じて変数の内容を変化させていくプログラミング言語のこと。SQLは非手続き型。
PL/SQLの特徴
(ストアド・プロシージャの例)
SQL言語の拡張
PL/SQLでは、他の手続き型言語と同じように、変数の利用やif、for、loopなどの制御構造を記述することができます。これにより、たとえばPL/SQL内で加工したデータを取得したり、仕様に沿うようチェックしてからデータを格納するといったような処理が実現できます。
ストアド・プログラムをOracleに格納
ストアド・プログラムとは、PL/SQLで記述した一連の処理手続きに名前を付け、Oracleに格納したものです。他の言語からこのストアド・プログラムを呼び出すことができます。 ストアド・プログラムにはストアド・プロシージャとストアド・ファンクションがあります。処理手続きのみのものがストアド・プロシージャ、処理手続きに加え、戻り値があるのがストアド・ファンクションです。
パッケージでライブラリ管理
システムやアプリケーション共通で使う機能はパッケージとして一元管理。管理しやすくなるとともに、他のアプリケーションから実行されたくないプログラムを隠蔽できます。オブジェクト指向的なプログラミングも可能です。
高いパフォーマンス
これがPL/SQLの最大の特長です。
PL/SQLでないプログラムの場合、プログラムからデータベースに対して複数回呼び出しを行い、データベースはSQL文を1文ずつ処理することになります。そのためアプリケーションとデータベースの間のネットワークに負荷がかかり、パフォーマンスが落ちる可能性があります。PL/SQLは複数のSQL文を一度に送信できるので、ネットワークの通信量を大幅に削減できます。ストアド・プログラムであれば既にOracleに格納されているSQLを使うことになるので、さらに高いパフォーマンスが期待できます。大規模なシステムほど、パフォーマンスは重要になっていきます。
移植性が高い
PL/SQLはOracle上で稼働します。システム移行の際にバージョンが違うOracleを使用することになっても、PL/SQLのプログラム自体に大きな修正を加える必要は基本的にはありません(個々の要件によります)。
プログラミング環境
有名なプログラミング環境はいくつかあり、参考書籍も複数存在しますが、JavaやC++といったメジャーな言語に比べると選択肢は少ないかもしれません。
標準のSQLではできない、こんな機能が実現可能
レコード1行or複数行に処理を加える
Oracleからデータを抽出する際、レコード1行ごとに処理を加えることも、複数行に処理を加えることも可能です。
SQLにストアド・ファンクションを使用する
ストアド・ファンクションはSQL文でも使用できます。SQLの中に複雑な業務ロジックを組み込むことができます。
トランザクションの制御
トランザクションとは「すべて成功(commit)」か「すべて失敗(Rollback)」のいずれかが保証される処理の単位です。PL/SQLでは複数の処理をまとめ、トランザクション制御やエラー処理を行います。
\Webサイト担当者としてのスキルが身に付く/
おわりに
以上簡単にご紹介しました。SQLを学んでいれば比較的短時間で習得できるのではと思います。ぜひ活用してみてください。
- この記事を書いた人
- murase miho