はじめに
最近、アサインされたプロジェクトでOracle DBを使用することになりました。
筆者はそれまでの経験ではDB2のみを扱っていたため、Oracle DB特有のPL/SQLを学ぶ必要がありました。
そこで、学んだ内容を備忘録として残すことにしました。
これからPL/SQLを学ぶ方の参考になれば幸いです。
PL/SQLとは?
PL/SQL(Procedural Language for SQL)は、Oracle Database専用のプログラミング言語です。SQL(Structured Query Language)はデータベース操作のための言語ですが、PL/SQLはSQLの拡張として、プログラミング的な機能を追加しています。具体的には、条件分岐やループ処理、エラーハンドリングなど、データベース操作をより柔軟かつ効率的に行うための手段を提供します。
PL/SQLを使うことで、データベース内で直接処理を行うことができ、パフォーマンスの向上や、アプリケーション側の負担を減らすことができます。
PL/SQLの基本構文
PL/SQLの基本的な構文は以下のようになります。
DECLARE
-- 変数宣言
BEGIN
-- 実行するSQL文やPL/SQLの処理
NULL; -- 何も実行しない場合
EXCEPTION
-- エラーハンドリング
WHEN OTHERS THEN
-- エラー処理
NULL;
END;
1. DECLARE
DECLARE
ブロックでは、PL/SQLで使用する変数を宣言します。この部分は任意で、必要な場合にのみ使用します。
2. BEGIN ... END
BEGIN
からEND
の間に実行したい処理を記述します。ここではSQL文やPL/SQLの制御構造(条件分岐やループなど)を使って処理を行います。
3. EXCEPTION
EXCEPTION
ブロックは、エラーハンドリングを行う部分です。PL/SQLの処理中にエラーが発生した場合に、どのように処理をするかを記述します。例えば、エラー発生時に通知を出すなどです。
実際にPL/SQLを使ってみよう
それでは、簡単なPL/SQLのサンプルを実行してみましょう。以下のコードは、データベース内に格納されている社員情報を処理する例です。
サンプルコード
DECLARE
v_employee_name VARCHAR2(100);
v_employee_salary NUMBER;
BEGIN
-- 社員IDを指定して社員名と給与を取得
SELECT employee_name, salary
INTO v_employee_name, v_employee_salary
FROM employees
WHERE employee_id = 100;
-- 結果を表示
DBMS_OUTPUT.PUT_LINE('社員名: ' || v_employee_name);
DBMS_OUTPUT.PUT_LINE('給与: ' || v_employee_salary);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('指定した社員IDのデータは見つかりませんでした');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('エラーが発生しました');
END;
説明
-
DECLAREブロック:
v_employee_name
とv_employee_salary
という変数を宣言します。これらに社員名と給与を格納します。 -
BEGIN ... ENDブロック:
-
SELECT INTO
文を使って、社員IDが100の社員の名前と給与を変数に格納します。 -
DBMS_OUTPUT.PUT_LINE
を使って、結果を画面に表示します。
-
-
EXCEPTIONブロック:
-
NO_DATA_FOUND
エラーを捕捉し、データが見つからなかった場合にメッセージを表示します。 -
OTHERS
で、その他のエラーを捕捉します。
-
実行方法
- SQL*PlusやOracle SQL Developerなどのツールを使用して、上記のコードを実行します。
-
DBMS_OUTPUT
を有効にすることで、コンソールに結果が表示されます。(コマンドSET SERVEROUTPUT ON
で有効化されます)
まとめ
PL/SQLは、SQLを拡張してデータベース内での処理を効率よく行うための強力なツールです。基本的な構文を覚えることで、Oracle DBの処理をより柔軟に操作できるようになります。最初は簡単なコードから始め、徐々に複雑な処理に挑戦していくことをお勧めします。
実際には、PL/SQLパッケージという構造を用いてリソースを管理していくようなので、そちらについては以下の記事をぜひご確認ください。