PL/SQL ¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç¡Ê£±¡Ë > ¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È

PL/SQL ¤Ë¤è¤ë¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È½èÍý Oracle 9i

¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È½èÍý (BULK INSERT:FORALL ¹½Ê¸) ¤Ï 1 ²ó¤Î¥³¥ó¥Æ¥­¥¹¥È¥¹¥¤¥Ã¥Á¤ÇÂçÎ̤Υ쥳¡¼¥É¤ò½èÍý¡Ê¥Ð¥ë¥¯½èÍý¡Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ ¤³¤Î¥³¥ó¥Æ¥­¥¹¥È¥¹¥¤¥Ã¥Á¡ÊPL/SQL ¥¨¥ó¥¸¥ó¤È SQL ¥¨¥ó¥¸¥ó¤Î´Ö¤ÇȯÀ¸¤¹¤ë½èÍý¤Î¤ä¤ê¼è¤ê¡Ë ¤Î²ó¿ô¤ò¸º¤é¤¹¤³¤È¤Ë¤è¤Ã¤ÆÂçÎ̥ǡ¼¥¿¤Î½èÍý»þ¤Î¥ì¥¹¥Ý¥ó¥¹¤ò¸þ¾å¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ë¡£

¤³¤Î¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥ÈÎã¤Ç¤Ï¥Ð¥ë¥¯¥Õ¥§¥Ã¥Á¡Ê¼è¤ê½Ð¤·¡Ë¤È¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤Ë ¥ì¥³¡¼¥É·¿ ¤Î ¥³¥ì¥¯¥·¥ç¥ó ¤ò »ÈÍѤ·¤Æ¤¤¤ë¡£¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤ËÂФ·¤Æ¥ì¥³¡¼¥É·¿¤ò»ÈÍѤǤ­¤ë¤Î¤Ï Oracle 9i °Ê¹ß¤È¤Ê¤ë¡£

Oracle 8i °ÊÁ°¤Ç¤Î¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È½èÍý
Oracle 8i °ÊÁ°¤Ç¤Ï¥ì¥³¡¼¥É·¿¤Ë¤è¤ë¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤Ë¤ÏÂбþ¤·¤Æ¤¤¤Ê¤¤¡£ ¥Õ¥£¡¼¥ë¥É¿ô¤¬Â¿¤¤¤È¤ä¤äÌÌÅݤˤʤ뤬¡¢¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È½èÍý¼«ÂÎ¤Ï Oracle 8i ¤Ç¤âµ­½Ò¤Ç¤­¤ë¤¬¡¢Ã±°ì¥Ç¡¼¥¿·¿¤Ë¤è¤ë¥³¥ì¥¯¥·¥ç¥ó¤òÊ£¿ô¸ÄÍѤ¤¤ë¤³¤È¤Ç¼ÂÁõ¤¹¤ë¤³¤È¤¬²Äǽ¡£

¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤Ë»È¤¦É½ÄêµÁ

ɽÄêµÁ¤Ï SQL ÆþÌç ¤Î¥Æ¡¼¥Ö¥ëÄêµÁ¤òήÍѤ·¤Æ¹Ô¤Ê¤¦¡£¤µ¤é¤Ë¥¤¥ó¥µ¡¼¥È½èÍýÍѤ˰ʲ¼¤Îºî¶È¤ò¹Ô¤Ê¤¦¡£

CREATE TABLE RIVUS.USER_MASTER_COPY AS SELECT * FROM RIVUS.USER_MASTER WHERE 1=0;
ALTER TABLE RIVUS.USER_MASTER_COPY ADD PRIMARY KEY (USER_ID);

¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤ÎÎã ¡ÊFOR ALL¡Ë

¥Ð¥ë¥¯¥Õ¥§¥Ã¥Á ¤ò¹Ô¤Ê¤Ã¤¿ ¥³¥ì¥¯¥·¥ç¥ó ¤ò¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤¹¤ë¡£
¥Ð¥ë¥¯½èÍý¤ÎÅÓÃæ¤ÇȯÀ¸¤·¤¿¥¨¥é¡¼¤Ï eBulkProcessNotComplete ¤ÇÎã³°½èÍý¤·(¢¨)·Ñ³½èÍý¤¹¤ë ¡£¡ÊSAVE EXCEPTIONS ¥ª¥×¥·¥ç¥ó¤Ë¤è¤Ã¤Æ½ªÎ»¤·¤Ê¤¤¡Ë

(¢¨) Îã³°½èÍýÉô¤Î¼ÂÁõ¤Ï¹Ô¤Ê¤Ã¤Æ¤¤¤Ê¤¤¡£°ÅÌÛ¥«¡¼¥½¥ë SQL%BULK_EXCEPTIONS ÇÛÎó¤ò»ÈÍѤ¹¤ë¤³¤È¤ÇÎã³°¤ÎȯÀ¸¤·¤¿Í×ÁÇÈÖ¹æ¤È¥¨¥é¡¼¥³¡¼¥É¤¬¼èÆÀ¤Ç¤­¤ë¡£

  1. CREATE OR REPLACE PROCEDURE RIVUS.BULK_FETCH_INSERT2
  2. IS
  3.   BULK_SIZE CONSTANT NUMBER := 4;  -- ¥³¥ó¥¹¥¿¥ó¥È¤Ç¤Ê¤¯¤Æ¤âÎɤ¤
  4.  
  5.   CURSOR cIDName IS
  6.     SELECT * FROM USER_MASTER ORDER BY 1 ;
  7.   TYPE tIDNAMES IS TABLE OF cIDName%ROWTYPE INDEX BY BINARY_INTEGER;
  8.   --  ¢¬ ¥«¡¼¥½¥ëÄêµÁ¤Ë¤è¤ë¥ì¥³¡¼¥É·¿¤Î¥³¥ì¥¯¥·¥ç¥ó¡Ê·ë¹çÇÛÎó¡Ë
  9.   vIDName tIDNAMES;
  10.  
  11.   -- ¥¨¥é¡¼¥Ï¥ó¥É¥éÍÑ ORA-24381: DMLÇÛÎó¤Ë¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹¡£
  12.   vBulkErrors  PLS_INTEGER := 0;
  13.   eBulkProcessNotComplete EXCEPTION;
  14.   PRAGMA EXCEPTION_INIT(eBulkProcessNotComplete, -24381);
  15. BEGIN
  16. --  ºÆ»î¹Ô¤È¥¨¥é¡¼¥Æ¥¹¥ÈÍÑ
  17. --  DELETE FROM USER_MASTER_COPY;
  18. --  COMMIT;
  19.  
  20.   OPEN cIDName;
  21.   LOOP
  22.     FETCH cIDName BULK COLLECT INTO vIDName LIMIT BULK_SIZE;
  23.     -- BULK FETCH ½èÍý
  24.     DBMS_OUTPUT.PUT_LINE('¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥ÈÂоݷï¿ô:' || vIDName.COUNT);
  25.     BEGIN
  26.       -- BULK INSERT ½èÍý
  27.       FORALL i in 1..vIDName.COUNT SAVE EXCEPTIONS  -- ¢« ¥¨¥é¡¼¤¬È¯À¸¤·¤Æ¤â·Ñ³
  28.         INSERT INTO USER_MASTER_COPY VALUES vIDName(i);
  29.         --   Oracle 9i ¤«¤é»ÈÍѤǤ­¤ëµ­½Ò ¢¬
  30.       COMMIT;
  31.     EXCEPTION
  32.       WHEN eBulkProcessNotComplete THEN
  33.         vBulkErrors := vBulkErrors + SQL%BULK_EXCEPTIONS.COUNT;
  34.         -- PROC_BULK_ERROR_HANDLER;
  35.     END;
  36.     EXIT WHEN cIDName%NOTFOUND;
  37.   END LOOP;
  38.   DBMS_OUTPUT.PUT_LINE('½èÍý·ï¿ô:' || cIDName%ROWCOUNT);
  39.   DBMS_OUTPUT.PUT_LINE('¥¨¥é¡¼¿ô:' || vBulkErrors);
  40.   CLOSE cIDName;
  41. END;
  42. /

º÷°ú¤¬ÉÔϢ³¤Ê¥³¥ì¥¯¥·¥ç¥ó¤ËÂФ¹¤ë¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È Oracle 10g

FORALL ¹½Ê¸¡ÊFOR ¤È ALL ¤Ë¥¹¥Ú¡¼¥¹¤Ê¤·¡Ë¤ò»ÈÍѤ¹¤ë¤Ë¤ÏϢ³¤·¤¿º÷°ú¤ò¤â¤Ä ¥³¥ì¥¯¥·¥ç¥ó·¿ ¤Ç¤¢¤ë¤³¤È¤¬¾ò·ï¤Ç¤¢¤Ã¤¿¤¬ Oracle 10g ¤«¤é¥³¥ì¥¯¥·¥ç¥ó¤Î°ìÉô¤ò DELETE ¤·¤¿º÷°ú¤¬ÉÔϢ³¤Ê¥³¥ì¥¯¥·¥ç¥ó¤Ç¤âº÷°ú¤òºÆ¹½ÃÛ¤»¤º¤Ë ¥Ð¥ë¥¯¥¤¥ó¥µ¡¼¥È¤¬²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£

FORALL index IN INDICES OF collection ... / FORALL index IN VALUES OF collection ... ¹½Ê¸

INDICES OF*1 ¤Ïº÷°úÉô¤ò VALUES OF ¤Ï¥³¥ó¥Æ¥ó¥ÄÉô¤ò¼è¤ê½Ð¤¹¤¿¤á¤Î½Ò¸ì¤È¤Ê¤ê¡¢¾å¤Î¥µ¥ó¥×¥ëÎã¤Î¥Ð¥ë¥¯½èÍýÉô¤ò½ñ¤­´¹¤¨¤Æ¾¯¤·¥¢¥ì¥ó¥¸¤ò²Ã¤¨¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡£

  1.       .....
  2.       -- BULK INSERT ½èÍý
  3.       FORALL i in INDICES OF vIDName BETWEEN 5 AND 10 SAVE EXCEPTIONS
  4.       --          ¢¬¢¬ IN INDICES OF .. [BETWEEN n AND m] [SAVE EXCEPTIONS]
  5.         INSERT INTO USER_MASTER_COPY VALUES vIDName(i);
  6.       .....


´ØÏ¢»ö¹à

¥¹¥Ý¥ó¥µ¡¼¥É ¥ê¥ó¥¯

IT¥¨¥ó¥¸¥Ë¥¢ ¥­¥ã¥ê¥¢¥¢¥Ã¥×¡¦Å¾¿¦¡¦µá¿Í¾ðÊó

Oracle & ITµ»½Ñ¼Ô ÀìÌç½ñ

¢£³¨¤Ç¸«¤Æ¤ï¤«¤ëOS/¥¹¥È¥ì¡¼¥¸/¥Í¥Ã¥È¥ï¡¼¥¯ ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ï¤³¤¦»
²Á³Ê: 2,310 ±ß ¡ÊÀǹþ¡Ë
¿·ÉÊ/¥æ¡¼¥º¥É²Á³Ê: 2,310 ±ß ¤è¤ê
¥ê¥ê¡¼¥¹: 2008-04-22
¥æ¡¼¥¶¡¼¥ì¥Ó¥å¡¼: 2 ·ï

¢£¥í¥¸¥«¥ë¡¦¥é¥¤¥Æ¥£¥ó¥° (BEST SOLUTION¡½LOGICAL COMMUNICATION
²Á³Ê: 2,310 ±ß ¡ÊÀǹþ¡Ë
¿·ÉÊ/¥æ¡¼¥º¥É²Á³Ê: 1,700 ±ß ¤è¤ê
¥ê¥ê¡¼¥¹: 2006-03-24
¥æ¡¼¥¶¡¼¥ì¥Ó¥å¡¼: 11 ·ï

¢£¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼¶µ²Ê½ñGold Oracle Database 10g¡ÚDBA10g¡ÛÊÔ (
²Á³Ê: 4,725 ±ß ¡ÊÀǹþ¡Ë
¿·ÉÊ/¥æ¡¼¥º¥É²Á³Ê: 3,720 ±ß ¤è¤ê
¥ê¥ê¡¼¥¹: 2005-11-23
¥æ¡¼¥¶¡¼¥ì¥Ó¥å¡¼: 4 ·ï

ÆüËÜ¥ª¥é¥¯¥ë
¢£ ÆüËÜ¥ª¥é¥¯¥ë ³ô¼°²ñ¼Ò
¢£ ¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼»ñ³Ê ¡Ê¥ª¥é¥¯¥ë¥Þ¥¹¥¿¡¼¤È¤Ï¡Ë
¢£ OTN Software Kit (³«È¯¼Ô¥é¥¤¥»¥ó¥¹)
Google

*1 Oracle ¤Ç¤Ï Ê£¿ô¤Î INDEX ¤ò INDEXES ¤È¤·¤ÆÍѤ¤¤Æ¤¤¤ë¤³¤È¤¬Â¿¤¤¤Î¤Ç¾¯¡¹Ê¶¤é¤ï¤·¤¤¤«¤â¤·¤ì¤Ê¤¤¡£