962148150 发表于 2018-9-12 12:12:39

oracle中bulk collect into用法

  通过bulk collect减少loop处理的开销
  采用bulk collect可以将查询结果一次性地加载到collections中。
  而不是通过cursor一条一条地处理。
  可以在select into,fetch into,returning into语句使用bulk collect。
  注意在使用bulk collect时,所有的into变量都必须是collections.
  举几个简单的例子:
  --在select into语句中使用bulk collect
  DECLARE
  TYPE SalList IS TABLE OF emp.sal%TYPE;
  sals SalList;
  BEGIN
  -- Limit the number of rows to 100.
  SELECT sal BULK COLLECT INTO sals FROM emp
  WHERE ROWNUM10;
  BEGIN
  OPEN c1;
  FETCH c1 BULK COLLECT INTO dept_recs;
  END;
  /
  --在returning into中使用bulk collect
  CREATE TABLE emp2 AS SELECT * FROM employees;
  DECLARE
  TYPE NumList IS TABLE OF employees.employee_id%TYPE;
  enums NumList;
  TYPE NameList IS TABLE OF employees.last_name%TYPE;
  names NameList;
  BEGIN
  DELETE FROM emp2 WHERE department_id = 30
  RETURNING employee_id, last_name BULK COLLECT INTO enums, names;
  dbms_output.put_line('Deleted ' || SQL%ROWCOUNT || ' rows:');
  FOR i IN enums.FIRST .. enums.LAST
  LOOP
  dbms_output.put_line('Employee #' || enums(i) || ': ' || names(i));
  END LOOP;
  END;
  /
  DROP TABLE emp2;

页: [1]
查看完整版本: oracle中bulk collect into用法