1. PL/SQL入門

 


📝 PL/SQL入門!これさえ読めば大丈夫!

SQLをより強力にした「PL/SQL」について、その基本から使い方までを解説します。


1. PL/SQLって一体何? 🤔

PL/SQLは「Procedural Language / SQL」の略で、日本語では「手続き型言語 / SQL」となります。

簡単に言うと、SQLプログラミング言語の良いとこ取りをしたものです。

SQLはデータを取ってきたり、更新したりするのは得意ですが、

  • 複数の処理を一度に実行したり

  • 「もし〜だったら」「〜を繰り返す」といった条件や繰り返し処理をしたり

  • 同じコードを再利用したり

といったことが苦手です。

これらの「プログラミング言語」が持つ機能をSQLに付け加えることで、より複雑で効率的な処理ができるようになります。それがPL/SQLなんです。

PL/SQLがすごい理由 ✨

PL/SQLを使うことで、以下のようなメリットがあります。

  • パフォーマンスが良い: データベースとPL/SQLは非常に相性が良く、処理が速いです。

  • 生産性が上がる: 開発者が役割分担しやすくなり、効率的に開発が進みます。

  • コードが再利用できる: 一度書いたコードを何度も使えるので、無駄がなくなります。

  • セキュリティが高い: 誰でもアクセスできる部分と、隠しておきたい部分を分けて管理できます。


2. PL/SQLの基本構造 🧱

PL/SQLのプログラムは、3つのブロックからできています。

ブロック名何をする場所?必須?
DECLARE変数やカーソルなど、必要なものを宣言する場所オプション(なくてもOK)
BEGIN実際の処理(データの取得・更新、条件分岐、ループなど)を書く場所必須
EXCEPTIONエラーが起きたときの処理を書く場所オプション(なくてもOK)

ほとんどの作業はBEGINブロックで行います。エラー処理が必要なければEXCEPTIONブロックは書かなくても大丈夫です。


3. PL/SQLの基本を学ぼう!

ここからは、実際にコードを見ながらPL/SQLの基本的な使い方を学びましょう。

3.1. 最初のプログラム:文字を表示してみよう

まずは、画面に文字を表示する簡単なプログラムです。

SQL
BEGIN
  -- 'ようこそ'という文字を画面に表示する
  DBMS_OUTPUT.PUT_LINE('ようこそ!');
END;
/

DBMS_OUTPUT.PUT_LINE は、画面に文字や変数の中身を表示するための命令です。

⚠️ 注意点: プログラムを実行しても、すぐに結果が表示されないことがあります。その場合は、SQL Developerのメニューから 「表示」→「DBMS出力」 をクリックし、出力ウィンドウの「有効化」ボタン(+)を押す必要があります。

3.2. 変数の使い方 📦

データを一時的に保管しておく「変数」を使いこなしましょう。

【変数の宣言方法】 変数はDECLAREブロックで宣言します。

  • 変数名 データ型;

  • 変数名 データ型 := 値; (初期値を設定)

  • 変数名 データ型 DEFAULT 値; (初期値を設定)

例:

SQL
DECLARE
  -- 変数を宣言し、初期値を設定
  order_id NUMBER := 1001; 
  customer_name VARCHAR2(20) DEFAULT '田中';
  
BEGIN
  -- 変数の中身を表示
  DBMS_OUTPUT.PUT_LINE('注文ID: ' || order_id); 
  DBMS_OUTPUT.PUT_LINE('顧客名: ' || customer_name);
END;
/

【CONSTANTS (定数) 】 もし、変数の値を後から変更したくない場合は、CONSTANTというキーワードを使います。

  • 変数名 CONSTANT データ型 := 値;

定数に設定すると、BEGINブロックの中で値を変更しようとしたときにエラーになります。


4. 条件と繰り返し処理 🔁

PL/SQLの真骨頂である、条件分岐と繰り返し処理を見ていきましょう。

4.1. IF-THEN-ELSE文

「もし〜だったら、この処理をする」という条件分岐です。

【基本構文】

SQL
IF 条件 THEN
  実行する処理;
END IF;

【より複雑な条件】

SQL
IF 条件1 THEN
  処理1;
ELSIF 条件2 THEN  -- "ELSE IF"と同じ
  処理2;
ELSE
  それ以外の処理;
END IF;

例:

SQL
DECLARE
  total_amount NUMBER := 150;
  discount NUMBER;
BEGIN
  IF total_amount > 200 THEN
    discount := total_amount * 0.20; -- 20%割引
  ELSIF total_amount >= 100 AND total_amount <= 200 THEN
    discount := total_amount * 0.10; -- 10%割引
  ELSE
    discount := total_amount * 0.05; -- 5%割引
  END IF;
  
  DBMS_OUTPUT.PUT_LINE('割引額は: ' || discount);
END;
/

4.2. CASE文

IF-THEN-ELSE文と同じように条件分岐を行いますが、よりスッキリと書けます。

【基本構文】

SQL
CASE
  WHEN 条件1 THEN
    実行する処理;
  WHEN 条件2 THEN
    実行する処理;
  ELSE
    それ以外の処理;
END CASE;

4.3. WHILEループ

「ある条件が満たされている間、処理を繰り返す」ためのループです。

【基本構文】

SQL
WHILE 条件 LOOP
  繰り返したい処理;
END LOOP;

例:

SQL
DECLARE
  counter NUMBER := 10;
BEGIN
  WHILE counter <= 20 LOOP
    DBMS_OUTPUT.PUT_LINE('カウンターの値: ' || counter);
    counter := counter + 1; -- 1ずつ増やす
  END LOOP;
END;
/

counter20になるまで、処理が繰り返し実行されます。

4.4. FORループ

「決まった回数だけ処理を繰り返す」ためのループです。

【基本構文】

SQL
FOR 変数 IN 開始値..終了値 LOOP
  繰り返したい処理;
END LOOP;

【逆順に繰り返す】 REVERSEキーワードを使います。

SQL
FOR 変数 IN REVERSE 開始値..終了値 LOOP
  繰り返したい処理;
END LOOP;

例:

SQL
BEGIN
  -- 10から20までループ
  FOR i IN 10..20 LOOP
    DBMS_OUTPUT.PUT_LINE('順方向: ' || i);
  END LOOP;

  -- 20から10までループ(逆順)
  FOR j IN REVERSE 10..20 LOOP
    DBMS_OUTPUT.PUT_LINE('逆方向: ' || j);
  END LOOP;
END;
/

5. コメントと変数スコープ 📝

5.1. コメント

コードに説明を書き加えるための「コメント」は、他の人がコードを読んだり、将来の自分がコードを理解するのにとても役立ちます。

  • 1行コメント: -- コメント

  • 複数行コメント: /* コメント */

5.2. グローバル変数とローカル変数

  • グローバル変数: 親のブロックで宣言された変数。プログラム全体で使えます。

  • ローカル変数: 子のブロックで宣言された変数。そのブロックの中だけでしか使えません。

複数のブロックがあるプログラムでは、変数がどこで使えるか注意しましょう。

これで、PL/SQLの基本はバッチリです!

前の記事:0. PL/SQL ソフトウェアインストール

次の記事:2. PL/SQLでのデータ処理