array processing, BULK COLLECT FETCH ¹× FORALLÀ» ÀÌ¿ëÇÏ¿© ´ë·®µ¥ÀÌÅÍÀÇ ±âÁ¸ 1row fetch ~ LOOP ¹æ½ÄÀÇ ºñÈ¿À²À» ȹ±âÀûÀ¸·Î °³¼±ÇÒ ¼ö ÀÖ´Ù.

´Ü, ÀÌ ¹æ¹ýÀº 8iÀÌ»ó¹öÀüºÎÅÍ °¡´É.

 

DECLARE

 

CURSOR all_depts IS
SELECT deptno, dname
FROM dept
ORDER BY dname;

 

TYPE dept_id IS TABLE OF dept.deptno%TYPE;
TYPE dept_name IS TABLE OF dept.dname%TYPE;

 

dept_ids dept_id;
dept_names dept_name;
inx1 PLS_INTEGER;

 

v_InsertStmt VARCHAR2(2000);

 

rows_processed number:=0;
net_processed number:=0;
last_value number:=0;

 

BEGIN


OPEN all_depts;
FETCH all_depts BULK COLLECT INTO dept_ids, dept_names;     -- ÇѲ¨¹ø¿¡ ·Îµù
CLOSE all_depts;

 

last_value := SQL%ROWCOUNT;      -- ¹Þ¾Æ¿Â µ¥ÀÌÅÍ ROW ¼ö

 

/** LoadÇÑ µ¥ÀÌÅÍÀÇ º¯Çü **/
while (rows_processed < last_value )  loop
begin

    FOR inx1 IN 1..dept_ids.count LOOP
    dept_names(inx1) := UPPER(dept_names(inx1) || '+');
    DBMS_OUTPUT.PUT_LINE (dept_ids(inx1) || ' ' || dept_names(inx1));
    END LOOP;
   
    FORALL x IN dept_ids.first..dept_ids.last
    insert into dept(deptno,dname)
    values (dept_ids(i),dept_names(i));
   
    rows_processed:=rows_processed+sql%ROWCOUNT;
    net_processed:=net_processed+sql%rowcount;
                                           
exception when others then
    begin
   
       rows_processed:=rows_processed+sql%ROWCOUNT+1;
       net_processed:=net_processed+sql%rowcount;
       commit;
    end;
end;
end loop;

 

END;