PL/SQL(Procedural Language/SQL)は、Oracle Databaseにおいて複雑な処理を記述するための手続き型言語です。SQLでは難しい制御構造やエラーハンドリング、変数の使用が可能で、Oracle業務における自動化・効率化に欠かせません。
本記事では、PL/SQLの基本構造と実行例を紹介し、各コマンドが「何をしているのか」を丁寧に解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔰 PL/SQLとは?
PL/SQLは「SQLだけでは実現できない業務ロジックをデータベース側で実行できるようにした言語」です。Oracle独自の言語であり、サーバー上で実行されるため、効率的かつ高速に処理を行えます。
📦 PL/SQLブロックの基本構造
DECLARE
-- 変数宣言部(必要に応じて)
BEGIN
-- 処理本体(SQLや制御構文)
EXCEPTION
-- エラー発生時の処理
END;
/
🔍 コマンドの処理内容一覧
| コマンド/構文 | 処理内容の説明 |
|---|---|
DECLARE | 変数・カーソルなどの定義を行う宣言部。省略可能です。 |
BEGIN | メインの処理を開始する実行部の開始です。 |
EXCEPTION | エラー発生時の処理を記述する例外処理部です。省略可能です。 |
END; | PL/SQLブロックの終了を示す構文です。 |
/ | SQL*PlusやSQL DeveloperでPL/SQLブロックを実行するための記号です。 |
DBMS_OUTPUT.PUT_LINE | 処理結果や文字列などを出力(標準出力)するためのプロシージャです。 |
SET SERVEROUTPUT ON | DBMS_OUTPUT.PUT_LINEの出力を画面に表示するための設定です。 |
✅ 出力を有効にする前準備
SET SERVEROUTPUT ON
このコマンドを実行しないと、DBMS_OUTPUT.PUT_LINEによる出力が表示されません。SQL*PlusやSQL Developerで実行時には最初に設定しておきましょう。
🧪 実行例と各処理の意味
1. 文字列の出力
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL!');
END;
/
BEGINで処理開始、DBMS_OUTPUT.PUT_LINEで「Hello, PL/SQL!」を出力し、END;で終了。/により実行され、出力結果が画面に表示されます。
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 DBMS_OUTPUT.PUT_LINE('Hello, PL/SQL!');
3 END;
4 /
Hello, PL/SQL! ★
PL/SQL procedure successfully completed.
2. 数値の演算と出力
DECLARE
v_num1 NUMBER := 10;
v_num2 NUMBER := 5;
v_sum NUMBER;
BEGIN
v_sum := v_num1 + v_num2;
DBMS_OUTPUT.PUT_LINE('Sum is ' || v_sum);
END;
/
DECLAREで3つの数値変数を定義。v_sum := v_num1 + v_num2;は加算の実行。DBMS_OUTPUT.PUT_LINEで結果を出力。
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_num1 NUMBER := 10;
3 v_num2 NUMBER := 5;
4 v_sum NUMBER;
5 BEGIN
6 v_sum := v_num1 + v_num2;
7 DBMS_OUTPUT.PUT_LINE('Sum is ' || v_sum);
8 END;
9 /
Sum is 15 ★
PL/SQL procedure successfully completed.
3. IF文での条件判定
DECLARE
v_score NUMBER := 75;
BEGIN
IF v_score >= 60 THEN
DBMS_OUTPUT.PUT_LINE('Pass');
ELSE
DBMS_OUTPUT.PUT_LINE('Fail');
END IF;
END;
/
- 条件分岐を行い、60点以上なら「Pass」と出力。
IF ~ THEN ~ ELSE ~ END IF;は基本的な条件構文。
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_score NUMBER := 75;
3 BEGIN
4 IF v_score >= 60 THEN
5 DBMS_OUTPUT.PUT_LINE('Pass');
6 ELSE
7 DBMS_OUTPUT.PUT_LINE('Fail');
8 END IF;
9 END;
10 /
Pass ★
PL/SQL procedure successfully completed.
4. FORループの繰り返し
BEGIN
FOR i IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE('Loop count: ' || i);
END LOOP;
END;
/
FOR i IN 1..3で1~3までのループ処理。DBMS_OUTPUT.PUT_LINEでループ回数を表示。
SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 FOR i IN 1..3 LOOP
3 DBMS_OUTPUT.PUT_LINE('Loop count: ' || i);
4 END LOOP;
5 END;
6 /
Loop count: 1 ★
Loop count: 2 ★
Loop count: 3 ★
PL/SQL procedure successfully completed.
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
5. WHILEループ
DECLARE
v_counter NUMBER := 1;
BEGIN
WHILE v_counter <= 3 LOOP
DBMS_OUTPUT.PUT_LINE('Count: ' || v_counter);
v_counter := v_counter + 1;
END LOOP;
END;
/
WHILEは条件を満たす間ループを実行。v_counter := v_counter + 1;でカウンターを加算。
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_counter NUMBER := 1;
3 BEGIN
4 WHILE v_counter <= 3 LOOP
5 DBMS_OUTPUT.PUT_LINE('Count: ' || v_counter);
6 v_counter := v_counter + 1;
7 END LOOP;
8 END;
9 /
Count: 1 ★
Count: 2 ★
Count: 3 ★
PL/SQL procedure successfully completed.
6. 例外処理の例(ゼロ除算)
DECLARE
v_result NUMBER;
BEGIN
v_result := 10 / 0;
DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Divide by zero error');
END;
/
- 10を0で割る処理によりエラーが発生。
EXCEPTION句によりエラー内容を出力。
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_result NUMBER;
3 BEGIN
4 v_result := 10 / 0;
5 DBMS_OUTPUT.PUT_LINE('Result: ' || v_result);
6 EXCEPTION
7 WHEN ZERO_DIVIDE THEN
8 DBMS_OUTPUT.PUT_LINE('Divide by zero error');
9 END;
10 /
Divide by zero error ★
PL/SQL procedure successfully completed.
📌 テキスト図:PL/SQLの構成
┌────────────────────────────┐
│ DECLARE(宣言部) │ ← 変数やカーソルを定義
├────────────────────────────┤
│ BEGIN(実行部) │ ← SQLや処理ロジックを記述
├────────────────────────────┤
│ EXCEPTION(例外処理部) │ ← エラー処理
└────────────────────────────┘
END;
🧠 PL/SQLの活用シーンと利点
| 活用シーン | 利点/目的 |
|---|---|
| 業務バッチ処理 | 繰り返し処理や条件分岐を含む複雑なロジックを記述可能 |
| エラー処理 | 例外ブロックで障害時の対応を実装でき、堅牢な処理が書ける |
| プロシージャ・関数定義 | 再利用可能なコード単位としてメンテナンス性が向上 |
| DBトリガー | 表の更新や挿入のタイミングで自動的に処理を実行できる |
📝 まとめ
PL/SQLはOracleユーザーにとって不可欠な知識です。今回紹介したように、単純なSQLに加え、手続き型の制御構文を学ぶことで、より高度な業務処理をデータベース側で完結させることができます。まずは BEGIN ~ END の基本ブロックを繰り返し実行して、基礎に慣れることが上達への第一歩です。
[参考]
データベースPL/SQL言語リファレンス – 1 PL/SQLの概要
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント