Oracle PL/SQLとは?基本構造・特徴・制御構文を完全解説!

Oracle Master Silver

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 ONDBMS_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専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました