oracle 根据另一个规则表的条件去更新一个无主键表中160W数据 分10W一次更新 怎样做
时间: 2024-03-28 21:40:18 浏览: 13
您可以按照以下步骤来更新这个无主键表中的数据:
1. 创建一个规则表,其中包含您要使用的条件。例如:
CREATE TABLE rule_table (
condition1 VARCHAR2(100),
condition2 NUMBER,
condition3 DATE,
...
);
2. 将您的更新分成 10 次,每次更新 10 万条数据。例如,第一次更新前 10 万条数据,第二次更新 10 万到 20 万条数据,以此类推。
3. 创建一个游标,使用规则表中的条件来选择要更新的数据。例如:
DECLARE
CURSOR c_data IS
SELECT *
FROM your_table t
WHERE EXISTS (
SELECT 1
FROM rule_table r
WHERE t.column1 = r.condition1
AND t.column2 = r.condition2
AND t.column3 = r.condition3
...
);
BEGIN
FOR i IN 1..10 LOOP
-- 更新前 10 万条数据,再更新 10 万到 20 万条数据,以此类推
UPDATE (
SELECT *
FROM c_data
WHERE ROWNUM <= 100000 * i
)
SET column1 = new_value1,
column2 = new_value2,
column3 = new_value3,
...
WHERE EXISTS (
SELECT 1
FROM rule_table r
WHERE your_table.column1 = r.condition1
AND your_table.column2 = r.condition2
AND your_table.column3 = r.condition3
...
);
COMMIT; -- 提交更改
END LOOP;
END;
4. 每次更新完成后,请务必提交更改,以确保更改不会丢失。
注意,这只是一个基本的更新方法,具体实现可能因您的数据和条件而异。请根据情况进行调整和修改。另外,由于无主键表的更新可能会导致数据重复或丢失,因此请务必在更新之前备份您的数据。