1、大批量的更新update表的數據
DECLARE
CURSOR CUR_B IS
SELECT COUNT(1)
FROM BatchCode A, BatchCode_dpp_201709071800 B
where A.entid = B.entid
and A.angleid = B.angleid
and A.goodsid = B.goodsid
and A.batchcode = B.batchcode
and A.valdate = B.valdate
ORDER BY A.ROWID; ---如果表的數據量不是很大,可以不用 order by rowid
V_COUNTER NUMBER;
BEGIN
V_COUNTER := 0;
FOR ROW_B IN CUR_B LOOP
UPDATE BatchCode
SET valdate = ROW_B.valdate
WHERE ROWID = ROW_B.ROW_ID;
V_COUNTER := V_COUNTER + 1;
IF (V_COUNTER >= 1000) THEN
COMMIT;
V_COUNTER := 0;
END IF;
END LOOP;
COMMIT;
END;
2、大批量的插入數據
方法1:
用Hint 提示減少操作時間
INSERT /*+Append*/ INTO tab1
SELECT * FROM tab2;
採用不寫日誌及使用Hint提示減少數據操作的時間。
建議方案是先修改表爲不寫日誌:
sql> alter table table_name NOLOGGING;
插入數據:
INSERT /*+Append*/ INTO tab1
SELECT * FROM tab2;
插入完數據後,再修改表寫日誌:
sql> alter table table_name LOGGING;
方法2:
用EXPDP/IMPDP 處理大量數據
(1)給當前的兩個表分別改名
alter table tab1 rename to tab11;
alter table tab2 rename to tab1;
(2)導出改名前的tab2
expdp user/pwd@... file=... log=... tables=(tab1)
(3)把名字改回來
alter table tab1 rename to tab2;
alter table tab11 rename to tab1;
(4)導入數據
impdp user/pwd@... file=... log=... fromuser=user touser=user tables=(tab1)