暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle Keywords 关键字 <六> 批量处理

Oracle优化大师 2020-12-07
394

   Oracle 数据库,在增删改时,为了提高效率可以使用关键字BULK COLLECT 

    成批聚合类型BULK COLLECT,采用bulk collect可以将查询结果一次性地加载到collections中。 而不是通过cursor一条一条地处理。 

    实例1

----在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 rownum <= 100;

  -- Retrieve 10% (approximately) of the rows in the table.

  SELECT sal BULK COLLECT

    INTO sals

    FROM emp SAMPLE 10;


END;

    实例2

--在fetch into中使用bulk collect

 

DECLARE

  TYPE deptrectab IS TABLE OF dept%ROWTYPE;

  dept_recs deptrectab;

  CURSOR c1 IS

    SELECT deptno,

           dname,

           loc

      FROM dept

     WHERE deptno > 10;

BEGIN

  OPEN c1;

  FETCH c1 BULK COLLECT

    INTO dept_recs;

END;


    实例3

--在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;

批操作,大数据的利器;


文章转载自Oracle优化大师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论