今回は、テーブルにループ文でデータを追加する方法について説明します。
※PL/SQLのループ文は、主にLOOP、WHILE LOOP、FOR LOOP、カーソルFOR LOOPの4種類があり、今回は特に使用する「FOR LOOP」の説明になります。
種類 | 概要・特徴 |
---|---|
1. LOOP (基本ループ) | 無限ループ。EXIT やEXIT 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_ID | EMP_NAME | SALARY |
---|---|---|
1 | Employee_1 | 3100 |
2 | Employee_2 | 3200 |
3 | Employee_3 | 3300 |
4 | Employee_4 | 3400 |
5 | Employee_5 | 3500 |
6 | Employee_6 | 3600 |
7 | Employee_7 | 3700 |
8 | Employee_8 | 3800 |
9 | Employee_9 | 3900 |
10 | Employee_10 | 4000 |
ちゃんと追加されていることが確認できました。次は、このデータを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_ID | EMP_NAME | SALARY |
---|---|---|
1 | Employee_1 | 3255 |
2 | Employee_2 | 3360 |
3 | Employee_3 | 3465 |
4 | Employee_4 | 3570 |
5 | Employee_5 | 3675 |
6 | Employee_6 | 3780 |
7 | Employee_7 | 3885 |
8 | Employee_8 | 3990 |
9 | Employee_9 | 4095 |
10 | Employee_10 | 4200 |
更新されていることがわかりました!
まとめ
今回は、PL/SQLのループ文の中でも最もよく使われる FOR LOOP
を使って、テーブルにデータを追加(INSERT
)し、さらにデータを更新(UPDATE
)する方法を紹介しました。テストデータの登録や更新等に役立つので、ぜひループ文を使いこなしてみてください!
コメント
とてもわかりやすい説明ありがとうございます!ループ文の使い方で迷っていましたが、これでスムーズに理解できそうです。ちなみに、FOR LOOP以外のループで同じようなデータ操作はできますか?