按行数更新 Oracle table
Update Oracle table by amount of rows
如果我 运行 下面的查询,我将更新 Oracle table 7K 行。我想通过每次 300 条记录来做到这一点。
INSERT INTO REQUEST
SELECT REQUEST_SEQ.NEXTVAL, REQUEST_ID, 'TEST', REF_ASK_ID, SYSDATE
FROM CITIES
INNER JOIN REFERENCE ON CITY_ID = REF_ID
WHERE REF_ASK_NM= 'DOWN'
AND CITY_WAY IN ('1', '33')
一次 300 行?为什么?让它变慢?
无论如何:
rownum
将确保占用 300 行
not exists
将确保不复制您已经复制的内容(如果 where 条件 捕获 它们全部)。
- 我不知道哪些列属于哪些 table,因为你没有使用 table 别名(是的,你应该有)
- 如果在
where
中使用的列有重复项,您可能仍会得到重复项,因为不能保证“一组”行将作为 整个 [=29] 插入=]
换句话说:一次完成。
INSERT INTO offices
SELECT office_seq.NEXTVAL, office_id, office_ref
FROM city INNER JOIN reference ON office_id = ref_id
WHERE ROWNUM <= 300
AND NOT EXISTS
(SELECT NULL
FROM offices b
WHERE b.office_id = city.office_id -- or maybe reference.office_id
AND b.office_ref = city.office_ref); -- or maybe reference.office_ref
如果我 运行 下面的查询,我将更新 Oracle table 7K 行。我想通过每次 300 条记录来做到这一点。
INSERT INTO REQUEST
SELECT REQUEST_SEQ.NEXTVAL, REQUEST_ID, 'TEST', REF_ASK_ID, SYSDATE
FROM CITIES
INNER JOIN REFERENCE ON CITY_ID = REF_ID
WHERE REF_ASK_NM= 'DOWN'
AND CITY_WAY IN ('1', '33')
一次 300 行?为什么?让它变慢?
无论如何:
rownum
将确保占用 300 行not exists
将确保不复制您已经复制的内容(如果 where 条件 捕获 它们全部)。- 我不知道哪些列属于哪些 table,因为你没有使用 table 别名(是的,你应该有)
- 如果在
where
中使用的列有重复项,您可能仍会得到重复项,因为不能保证“一组”行将作为 整个 [=29] 插入=]
换句话说:一次完成。
INSERT INTO offices
SELECT office_seq.NEXTVAL, office_id, office_ref
FROM city INNER JOIN reference ON office_id = ref_id
WHERE ROWNUM <= 300
AND NOT EXISTS
(SELECT NULL
FROM offices b
WHERE b.office_id = city.office_id -- or maybe reference.office_id
AND b.office_ref = city.office_ref); -- or maybe reference.office_ref