ORACLE FORALL介绍(三)

2014-11-24 17:02:47 · 作者: · 浏览: 2
artment_id = depts(j); -- How many rows were affected by each DELETE statement FOR i IN depts.FIRST..depts.LAST LOOP DBMS_OUTPUT.PUT_LINE('Iteration #' || i || ' deleted ' || SQL%BULK_ROWCOUNT(i) || ' rows.'); END LOOP; END; /

6、FORALL与BULK COLLECT 一起使用(Using FORALL With BULK COLLECT)
[sql] 
CREATE TABLE emp_temp AS SELECT * FROM employees;  
DECLARE  
   TYPE NumList IS TABLE OF NUMBER;  
   depts NumList := NumList(10,20,30);  
   TYPE enum_t IS TABLE OF employees.employee_id%TYPE;  
   TYPE dept_t IS TABLE OF employees.department_id%TYPE;  
   e_ids enum_t;  
   d_ids dept_t;  
BEGIN  
  FORALL j IN depts.FIRST..depts.LAST  
    DELETE FROM emp_temp WHERE department_id = depts(j)  
       RETURNING employee_id, department_id BULK COLLECT INTO e_ids, d_ids;  
  DBMS_OUTPUT.PUT_LINE('Deleted ' || SQL%ROWCOUNT || ' rows:');  
  FOR i IN e_ids.FIRST .. e_ids.LAST  
  LOOP  
    DBMS_OUTPUT.PUT_LINE('Employee #' || e_ids(i) || ' from dept #' || d_ids(i));  
  END LOOP;  
END;  
/