在 Oracle 数据库中,有几种常用的批量修改数据方法,我将为您详细介绍:
UPDATE 表名
SET 列名1 = 值1,
列名2 = 值2
WHERE 条件表达式;
示例:
UPDATE employees
SET salary = salary * 1.1,
last_update = SYSDATE
WHERE department_id = 10;
MERGE INTO 目标表 t
USING 源表 s
ON (t.键列 = s.键列)
WHEN MATCHED THEN
UPDATE SET t.列1 = s.列1, t.列2 = s.列2
WHEN NOT MATCHED THEN
INSERT (t.列1, t.列2) VALUES (s.列1, s.列2);
BEGIN
FOR rec IN (SELECT id, some_column FROM some_table WHERE condition) LOOP
UPDATE target_table
SET column_to_update = rec.some_column
WHERE id = rec.id;
-- 每1000条提交一次
IF MOD(rec.id, 1000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
/
DECLARE
TYPE id_array IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
TYPE value_array IS TABLE OF VARCHAR2(100) INDEX BY PLS_INTEGER;
v_ids id_array;
v_values value_array;
BEGIN
-- 填充数组
FOR i IN 1..1000 LOOP
v_ids(i) := i;
v_values(i) := 'Value ' || i;
END LOOP;
-- 批量更新
FORALL i IN 1..v_ids.COUNT
UPDATE my_table
SET column1 = v_values(i)
WHERE id = v_ids(i);
COMMIT;
END;
/
-- 创建临时表并插入要更新的数据
CREATE GLOBAL TEMPORARY TABLE temp_updates (
id NUMBER,
new_value VARCHAR2(100)
) ON COMMIT PRESERVE ROWS;
-- 插入要更新的数据
INSERT INTO temp_updates VALUES (1, 'Value 1');
INSERT INTO temp_updates VALUES (2, 'Value 2');
-- 更多插入...
-- 执行批量更新
UPDATE target_table t
SET t.column1 = (SELECT u.new_value FROM temp_updates u WHERE u.id = t.id)
WHERE EXISTS (SELECT 1 FROM temp_updates u WHERE u.id = t.id);
COMMIT;
您需要根据具体的业务需求、数据量和性能要求选择合适的方法。