Oracle 批量處理數據

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章