本文转载自:http://www.jb51.net/article/13678.htm
在一般的情况下,使用批量fetch的几率并不是很多,但是Oracle提供了这个功能我们最好能熟悉一下,说不定什么时候会用上它。
复制代码 代码如下:
declare
cursor c1 is select * from t_depart;
v_depart t_depart%rowtype ;
type v_code_type is table of t_depart.depart_code%type ;
v_code v_code_type ;
type v_name_type is table of t_depart.depart_name%type ;
v_name v_name_type ;
begin
open c1;
fetch c1 bulk collect into v_code , v_name ;
for i in 1..v_code.count loop
dbms_output.put_line(v_code(i)||' '||v_name(i));
end loop;
close c1;
end;
通过上面的这个列子大家可以发现如果列很多的话,为每一列定义一个集合似乎有些繁琐,可以把集合和%rowtype结合起来一起使用简化程序!
复制代码 代码如下:
declare
cursor c1 is select * from t_depart;
type v_depart_type is table of t_depart%rowtype ;
v_depart v_depart_type ;
begin
open c1;
fetch c1 bulk collect into v_depart ;
for i in 1..v_depart.count loop
dbms_output.put_line(v_depart(i).depart_code||' '||
v_depart(i).depart_name);
end loop;
close c1;
end;
在输出结果时既可以使用集合的count属性和可以使用first和last,在引用%rowtype类型的内容时还有一个需要注意的地方是v_depart(i).depart_code,而不是v_depart.depart_code(i),当然没有这样的写法,即使有意义也并不一样。
复制代码 代码如下:
declare
cursor c1 is select * from t_depart;
type v_depart_type is table of t_depart%rowtype ;
v_depart v_depart_type ;
begin
open c1;
fetch c1 bulk collect into v_depart ;
for i in v_depart.first..v_depart.last loop
dbms_output.put_line(v_depart(i).depart_code||' '||
v_depart(i).depart_name);
end loop;
close c1;
end;
详细出处参考:http://www.jb51.net/article/13678.htm
分享到:
相关推荐
- **使用LIMIT**:在某些情况下,可能需要限制`BULK COLLECT`获取的结果集大小,这可以通过在`SELECT`语句中使用`WHERE`子句或`SAMPLE`子句实现。 - **利用10g的新特性**:Oracle 10g增强了`FORALL`语句的功能,使得...
在提供的代码片段中,“sal,ename BULK COLLECT INTO”这一表述并未直接出现在代码中,但从整体上下文来看,这里主要涉及的是Oracle数据库中的PL/SQL语言,特别是`BULK COLLECT INTO`这一关键字及其应用场景。...
2. **在FETCH INTO语句中使用BULK COLLECT**: 同样,我们也可以在打开游标后,使用BULK COLLECT一次性获取多行记录。如下所示: ```sql DECLARE TYPE deptrectab IS TABLE OF departments%ROWTYPE; dept_recs ...
2. **性能优化**:批量操作前,分析和优化SQL语句,避免全表扫描。使用索引、分区等技术可以显著提升删除速度。 3. **备份与恢复**:在执行大规模的批量删除前,建议先进行数据备份,以防意外情况发生。 4. **权限...
-- 执行SQL语句 COMMIT; EXIT WHEN cur_name%NOTFOUND; END LOOP; ``` 2. **退出条件**: - 在使用`FETCH INTO`时,可以使用`EXIT WHEN cur_name%NOTFOUND`来判断是否已遍历完所有记录。 - 对于`BULK ...
4. **SQL提示**:在SQL语句中添加提示可以帮助优化器选择更好的执行计划,从而提高查询性能。 #### 四、其他注意事项 在实际应用中,还需要注意以下几点: - **事务管理**:确保在进行大批量的数据修改时使用适当...
1. **隐式游标**:Oracle为每个SQL语句自动提供隐式游标。当你执行一个DML(数据操纵语言)操作,如INSERT、UPDATE或DELETE时,系统会使用隐式游标。你无法直接控制隐式游标,但可以通过SQL%ROWCOUNT、SQL%NOTFOUND...
它可以指向一个SQL语句的结果集,并支持对这些结果进行逐行或批量处理。 2. **BULK COLLECT**: 这是Oracle提供的一个特性,允许一次性从查询结果集中获取多行记录,从而提高处理效率。 3. **FOR ALL** 语句:这是一...
例如,使用`BULK COLLECT`和`FORALL`语句来批量插入或更新数据,可以减少网络延迟并优化内存使用。 ```sql DECLARE TYPE emp_tab_type IS TABLE OF employees%ROWTYPE INDEX BY PLS_INTEGER; emp_tab emp_tab_...
之后,可以使用FORALL语句批量更新或插入这些行。 ```sql DECLARE TYPE T_CUR_FIRST_INDEX IS TABLE OF INDEX_A%ROWTYPE INDEX BY PLS_INTEGER; COLLECTION_FIRST_INDEX T_CUR_FIRST_INDEX; BEGIN SELECT A.ID...
除了传统的SELECT语句外,BULK COLLECT还可以与RETURNING INTO结合使用,实现更为复杂的逻辑处理: ```sql -- 假设存在一张名为test_return的表 DECLARE TYPE nt_test_return IS TABLE OF test_return%ROWTYPE; l_...
- 使用BULK COLLECT:批量提取多行数据,减少系统开销。 - 使用索引:确保查询的效率,特别是在大型数据集上。 - 避免在循环中执行DML语句:这可能导致大量的磁盘I/O和事务开销。 总结来说,Oracle游标是数据库编程...
此外,也可以使用BULK COLLECT语句批量处理数据,提高性能。 8. **游标变量**:游标变量可以存储一个打开的游标,使得我们可以将游标作为参数传递,或者在存储过程中使用。 9. **记录类型**:记录类型(RECORD)...
2. **隐式游标**:在执行简单的SQL语句(如`SELECT INTO`)时由系统自动创建和管理的游标。 在示例代码中,主要涉及了显式游标的使用。显式游标可以通过以下步骤进行创建和使用: - **声明游标**:使用`DECLARE`...
Oracle存储过程是数据库管理系统中的一种重要编程元素,用于封装一系列SQL语句和PL/SQL代码,以实现特定的业务逻辑或功能。在大型数据库应用中,分页查询是常见的需求,尤其是在展示大量数据时,避免一次性加载所有...
在这个示例中,游标`c`用于获取满足条件的记录,`BULK COLLECT INTO`语句用于批量收集数据,然后在PL/SQL环境中处理每页的数据。 总结起来,Oracle数据库提供了多种实现Web分页的方法,如ROW_NUMBER()函数、游标和...
默认情况下,`FETCH`语句会读取一行数据,但在高级用法中,我们可以结合`BULK COLLECT INTO`语句和`LIMIT`子句,一次读取多行数据,即实现分批读取。 ### 分批取数据示例解析 下面,我们通过分析给定的部分内容,...
Pl/SQL主要应用在Oracle数据库上,能够直接嵌入到SQL语句中执行,提高了执行效率。 #### 三、Pl/SQL基础知识 1. **变量与数据类型**:Pl/SQL支持多种数据类型,包括数字类型(NUMBER)、字符类型(VARCHAR2、CHAR)、...