通过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 ROWNUM <= 100;
-- Retrieve 10% (approximately) of the rows in the table.
SELECT sal BULK COLLECT INTO sals FROM emp SAMPLE 10;
END;
/
--在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;
/
--在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 中使用 fetch bulk collect into 批量效率的读取游标数据 Oracle 中的游标数据读取是数据库开发中非常常见的操作。通常,我们使用 fetch some_cursor into var1, var2 形式来获取游标数据,当游标中的记录数...
在FETCH INTO中使用BULK COLLECT ```plsql DECLARE TYPE dept_rec_tab IS TABLE OF dept%ROWTYPE; dept_recs dept_rec_tab; CURSOR c1 IS SELECT deptno, dname, loc FROM dept WHERE deptno > 10; BEGIN ...
在提供的代码片段中,“sal,ename BULK COLLECT INTO”这一表述并未直接出现在代码中,但从整体上下文来看,这里主要涉及的是Oracle数据库中的PL/SQL语言,特别是`BULK COLLECT INTO`这一关键字及其应用场景。...
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
根据提供的文件信息,我们可以深入探讨Oracle中的`BULK COLLECT`功能及其在实际场景中的应用。这段代码示例虽然较为杂乱,但可以提炼出的关键点主要包括:如何使用`BULK COLLECT`来提高查询效率、如何声明和使用表...
在 Oracle8i 中引入的 Bulk Collect 特性,适用于 select into、fetch into 和 returning into 语句。例如: 1. **在 select into 语句中使用 bulk collect**: 在这个示例中,我们创建了一个名为 SalList 的表...
结合一个存储过程的实例,介绍了 bulk collect 的使用
Oracle BULK COLLECT 是一种在PL/SQL中用于优化数据处理的方法,特别是在处理大量数据时。这个特性允许一次性从数据库中获取多个记录,而不是传统的单行迭代方式,从而显著提高性能。在给定的示例代码中,展示了如何...
BULK COLLECT INTO`语句将查询结果直接存入这个数组中。在示例中,我们查询了所有父资金账户号为"320001054663"的房屋账户信息,并通过循环遍历数组`v_acct_table`来打印这些信息。这种方法减少了与数据库的交互...
接着,使用 `bulk collect into` 语句从Cursor中一次性获取多行数据,并分别存入 `v_code` 和 `v_name` 集合中。最后,通过循环遍历集合并打印出数据。 更简洁的方法是,我们可以定义一个包含整个记录类型的集合,...
1. **在SELECT INTO语句中使用BULK COLLECT**: 当需要从表中获取多行数据时,传统的做法是通过游标(cursor)逐行处理。但使用BULK COLLECT,我们可以直接将结果集加载到集合中。例如: ```sql DECLARE TYPE ...
输出绑定使用`BULK COLLECT INTO`关键字,允许SQL引擎在返回结果给PL/SQL引擎前批量收集数据。这些数据可以是数量或复合值,如对象,被存储在INTO列表对应字段中。例如: ```sql SELECT ... BULK COLLECT INTO ...
通过`BULK COLLECT INTO`语句,一次性获取最多250,000条记录,并存储到`ref_bulk`数组中。随后,使用`FORALL`循环将这些记录插入到另一个表`emp_table_his`中。这种方式大大减少了数据库服务器上的网络通信次数。 #...
以上内容展示了Oracle数据库中游标的基本用法和高级特性,包括标准的FETCH INTO、BULK COLLECT INTO、记录类型变量、参数游标、游标FOR循环以及存储过程的创建。这些知识点对于理解Oracle数据库的复杂查询和数据处理...
SELECT SALARY BULK COLLECT INTO topsalary_table FROM EMPLOYEES GROUP BY salary ORDER BY salary DESC; FOR i IN 1..&top_n LOOP v_salary := topsalary_table(i).salary; -- 进一步处理或输出结果 END ...
在Oracle中,插入数据到表中的主要语句是`INSERT INTO`,它允许你将新记录添加到已存在的表中。下面我们将深入探讨Oracle SQL语句插入数据的相关知识点。 一、基本语法 Oracle SQL 插入数据的基本语法如下: ```...
BULK COLLECT是Oracle 8i版本引入的一项特性,它允许开发人员一次从数据库中检索多行记录到PL/SQL集合中,从而减少上下文切换的开销,提高程序执行效率。相比于传统的循环遍历方式,BULK COLLECT提供了更高效的数据...