fetch cursor bulk collect 用法

oracle 在9i版本之後提供了一種批量更新方法,可以迅速的提高大數據量的批量更新。

 

  1. CREATE OR Replace PROCEDURE PRO_COLLECT_TEST IS 
  2.   TYPE TP_TYPE IS TABLE OF APPS.SYS_USER.USER_ID%TYPE; 
  3.   TYPE TP_TYPE2 IS TABLE OF APPS.SYS_USER.USER_NAME%TYPE; 
  4.   TYPE TP_TYPE3 IS TABLE OF APPS.SYS_USER.CREATE_DATE%TYPE; 
  5.   VN_ID   TP_TYPE; 
  6.   VS_NAME TP_TYPE2; 
  7.   VD_DATE TP_TYPE3; 
  8.   CURSOR P_COLLECT IS 
  9.     SELECT A.USER_ID, A.USER_NAME, A.CREATE_DATE FROM APPS.SYS_USER A; 
  10.  
  11. BEGIN 
  12.   OPEN P_COLLECT; 
  13.   LOOP 
  14.   -- 收集數據 
  15.     FETCH P_COLLECT BULK COLLECT 
  16.       INTO VN_ID, VS_NAME, VD_DATE; 
  17.     
  18.     FOR I IN VN_ID.FIRST .. VN_ID.LAST LOOP 
  19.       CASE VN_ID(I): 
  20.         WHEN 1 THEN 
  21.         UPDATE APPS.SYS_USER A 
  22.            SET A.LAST_UPDATE_DATE = VD_DATE(I) 
  23.          WHERE A.USER_ID = VN_ID(I); 
  24.          CASE 2 THEN  
  25.          UPDATE APPS.SYS_USER A 
  26.            SET A.Create_By = vs_name(i) 
  27.          WHERE A.USER_ID = VN_ID(I); 
  28.          CASE 3 THEN  
  29.            UPDATE APPS.SYS_USER A 
  30.            SET A.Last_Update_By = vs_name(i) 
  31.          WHERE A.USER_ID = VN_ID(I); 
  32.          ELSE  
  33.          NULL;  
  34.         COMMIT
  35.       END IF; 
  36.     END LOOP; 
  37.    
  38.     EXIT WHEN P_COLLECT%NOTFOUND; 
  39.   END LOOP; 
  40.   CLOSE P_COLLECT; 
  41.  
  42. END PRO_COLLECT_TEST; 

 

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