【Oracle】PL/SQL入門

この記事を書いたチーム:frontier

PL/SQLとは

【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc.  詳細はこちらから>

まずPL/SQLとはなんぞやとういう事ですが、

“Oracle社がOracleDataBaseのために独自にSQLを拡張したプログラミング言語(参照 : PL/SQL by Wikipedeia)”のことです。SQL(非手続き型言語)を手続き型に拡張して、If文やloop文などの条件文を記述することができたり、プログラム自体をOracleのデータベース内に保存することができます。

“プログラミング言語“を謳っていますので、記述方法さえ覚えてしまえば習得も比較的優しい言語だと個人的には思います。

主に使用用途はストアドプログラム(プロシージャ、ファンクション、パッケージ)やトリガーなどがあげられます。ストアドプログラムはstoredと書く通り、データベースに貯めておくことのできるプログラム。トリガーはあるテーブルが更新されたときなどの特定の処理が起きたとき(トリガー= 引き金)、処理を実行するプログラムのことです。

PL/SQLの基本

PL/SQLですが、大きく処理部を3つに分けることができます。

  1. DECLARE – 宣言部 (プロシージャなどの場合 CREATE (OR REPLACE) PROCEDURE(引数) ISと書く)

  2. BEGIN ~ END – 処理部

  3. EXCEPTION – 例外処理部

簡単にそれぞれの宣言部について説明しましょう。

DECLAREですが、PL/SQLでは変数や定数を定義したり、CURSORと呼ばれる検索した複数行の結果を1行ずつ処理するための機能を定義することができます。もちろん引数を受け取るように定義することもできます。

BEGIN ~ ENDでは、主となる処理を書きます。SELECTで取得した結果をIF文で判定した結果、UPDATEしたり、DELETEしたりと複数のSQLを一度に記述できます。

EXCEPTIONでは、例外処理が起きたときの処理を記述します。特定のエラーが発生した場合ログを出力するなど細かく制御可能です。

では、実際のコードを次章で書いてみます。

コードを書いてみる

どうでしょうか。初見でコードを呼んだとしてもプログラミング経験者ならどのような処理記述されているか分かると思います。IF文がSQLに混じって記述されていますが、取得した結果に対してその後の処理を変えることができるんですね。

他にもFOR文やLOOP文だったりもよく使用されます。また上記で少し触れましたが、CURSORという他のプログラミング言語では見慣れない形の構文もありますが、こちらもよく使用されます。使用方法を覚えればあれを使えば、これをこう使えばという風に柔軟にプログラミングをすることができます。

まとめ

ここまでPL/SQLの基本やコードの例に説明をしてきました。かなり取っつきやすい言語ではないでしょうか。ではPL/SQLのメリットとはなんでしょう。他のプログラミング言語でもSQLを発行して、返ったきた結果に対して条件などの処理分岐ができるのでは..?と思われるでしょう。

一般的に以下のようなメリットが考えられます。

  • 複数のSQLを一度の処理でまとめて記述することで、一回の実行で済む。このためサーバーの負荷の軽減などのメリットが見込まれる
  • 繰り返し使用するSQLを保存できるので、コードが冗長になりにくい。
  • アプリケーションからデータベースへのアクセスが制限できるので、セキュリティの強化につながる。SQLインジェクション対策としても有効
  • アプリケーションに影響を与えずに、SQLの修正が可能。

などがあげられます。

一方でデメリットは、

  • あまりに多くのストアドプログラムなどがあると、かえってサーバーに負荷がかかる

という点があげれらます。

こうしたメリット・デメリットを踏まえた上で、PL/SQLを使ってみてはいかがでしょうか。個人的にSQLが苦手な人はSQLを否が応でも沢山記述することになるので、苦手を克服することも兼ねて、習得して損のない言語だと思います。

【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>

Smallitのサービス