Oracleにおける大量データ更新の方法は何ですか?
Oracleデータベースでは、大量のデータ更新操作を行うためのさまざまな方法があります。以下に、いくつか一般的な操作方法を示します:
- UPDATE文を使用すると、テーブル内のデータを直接更新できます。更新するデータの範囲を制限するためにWHERE句を使用できます。
例えば、表の全ての従業員の給与を10%増やすには、次の文を使用します。
UPDATE employees
SET salary = salary * 1.1;
あるいは、特定の部署の従業員の給与を更新したい場合は、次の文を使用することができます。
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 10;
- MERGE文: MERGE文は、ソースデータをターゲットテーブルにマージし、条件に基づいて挿入、更新、削除を判断します。
例えば、一時テーブルのデータを目標のテーブルにマージするには、次のステートメントを使用します:
MERGE INTO target_table
USING source_table
ON (target_table.id = source_table.id)
WHEN MATCHED THEN
UPDATE SET target_table.column1 = source_table.column1,
target_table.column2 = source_table.column2
WHEN NOT MATCHED THEN
INSERT (id, column1, column2)
VALUES (source_table.id, source_table.column1, source_table.column2);
- PL/SQLのループを使用すると、各データに対して複雑な処理ロジックを実行する必要がある場合に、データを一つずつ更新することができます。
例えば、従業員の給与を階級に応じて調整する際には、次のPL/SQLコードを使用することができます。
DECLARE
CURSOR employees_cur IS
SELECT employee_id, salary, grade
FROM employees;
BEGIN
FOR employee_rec IN employees_cur LOOP
IF employee_rec.grade = 'A' THEN
UPDATE employees
SET salary = employee_rec.salary * 1.1
WHERE employee_id = employee_rec.employee_id;
ELSIF employee_rec.grade = 'B' THEN
UPDATE employees
SET salary = employee_rec.salary * 1.05
WHERE employee_id = employee_rec.employee_id;
END IF;
END LOOP;
END;
実際のニーズとデータサイズに応じて、適切な方法を選択してください。