PL/SQLは、Oracleデータベースで利用される強力な手続き型言語です。SQL文に加えて、条件分岐や繰り返し処理、例外処理などを使って複雑なロジックを組み立てることができます。この記事では、PL/SQLの基本的な構文とブロック構造について、初心者の方でも理解できるように丁寧に解説します。
PL/SQLとは?
PL/SQL(Procedural Language/SQL)は、Oracleが提供する拡張SQL言語で、通常のSQL文に加えて、制御構文(IF文やLOOP文)、変数の使用、例外処理などの機能を組み合わせて、より柔軟なデータ操作を実現できます。
PL/SQLの基本構造
PL/SQLのコードは「ブロック構造」で記述します。基本形は以下のようになります。
DECLARE
-- 変数の宣言
BEGIN
-- 処理内容(SQLやPL/SQLの命令)
EXCEPTION
-- 例外処理(エラーが発生した場合の対応)
END;
それぞれのセクションの役割を解説します。
DECLARE:変数の宣言セクション
この部分では、PL/SQLブロック内で使用する変数や定数、カーソルなどを宣言します。省略することも可能です。
DECLARE
v_name VARCHAR2(50);
v_age NUMBER;
BEGIN:処理本体
SQL文の実行や、変数への代入、IF文やループ処理などのロジックを記述します。PL/SQLではセミコロン(;)で各文の終わりを表します。
BEGIN
v_name := '田中';
v_age := 30;
DBMS_OUTPUT.PUT_LINE('名前:' || v_name || '、年齢:' || v_age);
EXCEPTION:例外処理セクション
エラーが発生した際の処理を記述します。例えばゼロ除算やNO_DATA_FOUNDなど、さまざまな例外に対応可能です。
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('エラーが発生しました');
END:ブロックの終了
最後は必ずENDで締めくくり、セミコロンを忘れずに付けましょう。
END;
無名ブロックと名前付きブロック
PL/SQLでは、「無名ブロック(Anonymous Block)」と「名前付きブロック(ProcedureやFunction)」の2種類があります。今回紹介しているのは無名ブロックで、主にSQL*Plusやツール上で一時的に実行する用途に向いています。
一方で、繰り返し利用したい処理は、名前付きのストアドプロシージャやファンクションとして定義するのが一般的です。
DBMS_OUTPUTを使った出力
PL/SQLでは標準出力にメッセージを出すには、DBMS_OUTPUT.PUT_LINE
を使います。これによりデバッグや確認がしやすくなります。
BEGIN
DBMS_OUTPUT.PUT_LINE('こんにちは、PL/SQL!');
END;
※ツールによっては、SET SERVEROUTPUT ON
を実行してから出力を確認する必要があります。
まとめ
PL/SQLの基本構文は、シンプルなブロック構造に基づいており、変数宣言・処理本体・例外処理を適切に分けることで、読みやすく保守性の高いコードが書けるようになります。まずは無名ブロックから始め、徐々にプロシージャやファンクションなどへステップアップしていくと良いでしょう。
次回は、IF文やLOOP文といった制御構文を詳しく紹介する予定です。