【Oracle】PL/SQLのループ文(INSERT・UPDATE)

Oracle

今回は、テーブルにループ文でデータを追加する方法について説明します。

PL/SQLのループ文は、主にLOOP、WHILE LOOP、FOR LOOP、カーソルFOR LOOPの4種類があり、今回は特に使用する「FOR LOOP」の説明になります。

種類概要・特徴
1. LOOP(基本ループ)無限ループ。EXITEXIT WHENで明示的に抜ける必要があります。
2. WHILE LOOP条件がTRUEの間だけループします。事前に条件をチェックします。
3. FOR LOOP指定した範囲の数値でループします。カウンタの増減は自動です。
4. カーソル FOR LOOPカーソルで取得したレコード集合に対して1件ずつ処理を行います。カーソルのOPEN/FETCH/CLOSE不要。

データ準備

PL/SQLのループ文を試すためにテーブルを作成します。

-- テーブル作成
CREATE TABLE employees (
    emp_id   NUMBER PRIMARY KEY,
    emp_name VARCHAR2(50),
    salary   NUMBER
);

ループ文(FOR LOOP)の書き方

FOR LOOP は下記のように記述します。

BEGIN
    FOR i IN 開始値..終了値 LOOP
        -- 処理内容
    END LOOP;
END;

INSERT文

作成した従業員テーブル(employees)にFOR LOOPでデータを10レコード追加していきます。

BEGIN
    FOR i IN 1..10 LOOP
        INSERT INTO employees (emp_id, emp_name, salary)
        VALUES (i, 'Employee_' || i, 3000 + i * 100);
    END LOOP;
    COMMIT;
END;

追加できているのか、SELECT文で確認してみましょう!

SELECT
  *
FROM
  employees
ORDER BY
  emp_id;
EMP_IDEMP_NAMESALARY
1Employee_13100
2Employee_23200
3Employee_33300
4Employee_43400
5Employee_53500
6Employee_63600
7Employee_73700
8Employee_83800
9Employee_93900
10Employee_104000

ちゃんと追加されていることが確認できました。次は、このデータをUPDATEしていきます。

UPDATE文

従業員テーブルの給料(salary)を5%だけアップしてみます。

BEGIN
    FOR rec IN (SELECT emp_id, salary FROM employees) LOOP
        UPDATE employees
        SET salary = rec.salary * 1.05
        WHERE emp_id = rec.emp_id;
    END LOOP;
    COMMIT;
END;

更新できたか、SELECT文を使って確認してみましょう!

SELECT
  *
FROM
  employees
ORDER BY
  emp_id;
EMP_IDEMP_NAMESALARY
1Employee_13255
2Employee_23360
3Employee_33465
4Employee_43570
5Employee_53675
6Employee_63780
7Employee_73885
8Employee_83990
9Employee_94095
10Employee_104200

更新されていることがわかりました!

まとめ

今回は、PL/SQLのループ文の中でも最もよく使われる FOR LOOP を使って、テーブルにデータを追加(INSERT)し、さらにデータを更新(UPDATE)する方法を紹介しました。テストデータの登録や更新等に役立つので、ぜひループ文を使いこなしてみてください!

コメント

  1. Yumiko Tanegashima より:

    とてもわかりやすい説明ありがとうございます!ループ文の使い方で迷っていましたが、これでスムーズに理解できそうです。ちなみに、FOR LOOP以外のループで同じようなデータ操作はできますか?

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