oracle 在9i版本之後提供了一種批量更新方法,可以迅速的提高大數據量的批量更新。
- CREATE OR Replace PROCEDURE PRO_COLLECT_TEST IS
- TYPE TP_TYPE IS TABLE OF APPS.SYS_USER.USER_ID%TYPE;
- TYPE TP_TYPE2 IS TABLE OF APPS.SYS_USER.USER_NAME%TYPE;
- TYPE TP_TYPE3 IS TABLE OF APPS.SYS_USER.CREATE_DATE%TYPE;
- VN_ID TP_TYPE;
- VS_NAME TP_TYPE2;
- VD_DATE TP_TYPE3;
- CURSOR P_COLLECT IS
- SELECT A.USER_ID, A.USER_NAME, A.CREATE_DATE FROM APPS.SYS_USER A;
- BEGIN
- OPEN P_COLLECT;
- LOOP
- -- 收集數據
- FETCH P_COLLECT BULK COLLECT
- INTO VN_ID, VS_NAME, VD_DATE;
- FOR I IN VN_ID.FIRST .. VN_ID.LAST LOOP
- CASE VN_ID(I):
- WHEN 1 THEN
- UPDATE APPS.SYS_USER A
- SET A.LAST_UPDATE_DATE = VD_DATE(I)
- WHERE A.USER_ID = VN_ID(I);
- CASE 2 THEN
- UPDATE APPS.SYS_USER A
- SET A.Create_By = vs_name(i)
- WHERE A.USER_ID = VN_ID(I);
- CASE 3 THEN
- UPDATE APPS.SYS_USER A
- SET A.Last_Update_By = vs_name(i)
- WHERE A.USER_ID = VN_ID(I);
- ELSE
- NULL;
- COMMIT;
- END IF;
- END LOOP;
- EXIT WHEN P_COLLECT%NOTFOUND;
- END LOOP;
- CLOSE P_COLLECT;
- END PRO_COLLECT_TEST;