📝 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つのブロックからできています。
ほとんどの作業はBEGINブロックで行います。エラー処理が必要なければEXCEPTIONブロックは書かなくても大丈夫です。
3. PL/SQLの基本を学ぼう!
ここからは、実際にコードを見ながらPL/SQLの基本的な使い方を学びましょう。
3.1. 最初のプログラム:文字を表示してみよう
まずは、画面に文字を表示する簡単なプログラムです。
BEGIN
-- 'ようこそ'という文字を画面に表示する
DBMS_OUTPUT.PUT_LINE('ようこそ!');
END;
/
DBMS_OUTPUT.PUT_LINE は、画面に文字や変数の中身を表示するための命令です。
⚠️ 注意点: プログラムを実行しても、すぐに結果が表示されないことがあります。その場合は、SQL Developerのメニューから 「表示」→「DBMS出力」 をクリックし、出力ウィンドウの「有効化」ボタン(+)を押す必要があります。
3.2. 変数の使い方 📦
データを一時的に保管しておく「変数」を使いこなしましょう。
【変数の宣言方法】
変数はDECLAREブロックで宣言します。
変数名 データ型;変数名 データ型 := 値;(初期値を設定)変数名 データ型 DEFAULT 値;(初期値を設定)
例:
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文
「もし〜だったら、この処理をする」という条件分岐です。
【基本構文】
IF 条件 THEN
実行する処理;
END IF;
【より複雑な条件】
IF 条件1 THEN
処理1;
ELSIF 条件2 THEN -- "ELSE IF"と同じ
処理2;
ELSE
それ以外の処理;
END IF;
例:
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文と同じように条件分岐を行いますが、よりスッキリと書けます。
【基本構文】
CASE
WHEN 条件1 THEN
実行する処理;
WHEN 条件2 THEN
実行する処理;
ELSE
それ以外の処理;
END CASE;
4.3. WHILEループ
「ある条件が満たされている間、処理を繰り返す」ためのループです。
【基本構文】
WHILE 条件 LOOP
繰り返したい処理;
END LOOP;
例:
DECLARE
counter NUMBER := 10;
BEGIN
WHILE counter <= 20 LOOP
DBMS_OUTPUT.PUT_LINE('カウンターの値: ' || counter);
counter := counter + 1; -- 1ずつ増やす
END LOOP;
END;
/
counterが20になるまで、処理が繰り返し実行されます。
4.4. FORループ
「決まった回数だけ処理を繰り返す」ためのループです。
【基本構文】
FOR 変数 IN 開始値..終了値 LOOP
繰り返したい処理;
END LOOP;
【逆順に繰り返す】
REVERSEキーワードを使います。
FOR 変数 IN REVERSE 開始値..終了値 LOOP
繰り返したい処理;
END LOOP;
例:
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の基本はバッチリです!
