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;
批操作,大数据的利器;