bulk collect 以及ref cursor使用

declare
---定义一个ref游标
  type empcurtyp is ref cursor;
---定义一个table类型
  type idlist is table of emp.empno%type;
---定义一个table类型
  type namelist is table of emp.ename%type;
---定义一个table类型
  type sallist is table of emp.sal%type;
---定义一个ref cursor类型的变量
  emp_cv empcurtyp;
---定义一个table类型的变量
  ids idlist;
---定义一个table类型的变量
  names namelist;
---定义一个table类型的变量
  sals sallist;
  row_cn number;
 begin
   open emp_cv for select empno,ename,sal from emp;
   fetch emp_cv bulk collect into ids,names,sals;  --使用bulk collect 一次性把结果取出
  close emp_cv;
  for i in ids.first .. ids.last loop
      dbms_output.put_line(ids(i)||‘ ‘||names(i)||‘ ‘||sals(i));
  end loop;
end;
时间: 2024-10-20 06:25:48

bulk collect 以及ref cursor使用的相关文章

oracle 游标变量ref cursor详解

oracle 游标变量ref cursor详解 分类: PL/SQL开发 2013-12-04 15:15 685人阅读 评论(0) 收藏 举报 oracleref cursor 一 介绍      像游标cursor一样,游标变量ref cursor指向指定查询结果集当前行.游标变量显得更加灵活因为其声明并不绑定指定查询. 其主要运用于PLSQL函数或存储过程以及其他编程语言java等程序之间作为参数传递.     不像游标的一点,游标变量没有参数.     游标变量具有以下属性:     (

ORACLE fetch bulk collect into limit

DECLARE TYPE rr IS REF CURSOR; TYPE r_emp IS RECORD( empno NUMBER(4), ename VARCHAR2(10), job VARCHAR2(9), mgr NUMBER(4), hiredate DATE, sal NUMBER(7, 2), comm NUMBER(7, 2), deptno NUMBER(2)); TYPE t_e IS TABLE OF r_emp; e t_e; ee t_e:= t_e(); r rr;

REF CURSOR 总结

REF 游标:REF游标又称为动态游标,在运行时使不同的语句与之关联,动态关联结果集的临时对象,即在运行的时候动态决定执行查询.REF游标可以使用游标变量.游标变量:游标变量是一种引用REF游标类型的变量,只想动态关联的结果集.游标变量的类型:1.具有约束的游标变量,具有返回类型的游标变量也称为强游标.2.无约束的游标变量,没有返回类型的游标变量也称为弱游标.REF游标的作用:实现程序间传递结果集的功能,利用REF cursor 也可以实现bulk sql 从而提高sql性能.静态游标和REF游

bulk collect no_data_found exception

Bulk collect当没有数据抛出异常跟implicit cursor 处理不一样. 先看一下implicit cursor的处理吧: cl scr; DECLARE l_descr hardware.descr%type; BEGIN SELECT descr INTO l_descr FROM hardware WHERE aisle = 0 AND item = 0; dbms_output.put_line('Item was found'); EXCEPTION WHEN no_d

FORALL与BULK COLLECT是实现批量SQL

2014年11月20日,星期四 更新 1. 示例1 declare/*    type card_rec_type is record    ( dn_no channel.dn_no%type,        channel_id channel.channel_id%type);    type nested_card_type is table of card_rec_type;    card_tab nested_card_type; */    cursor card_rec is 

oracle学习之bulk collect用法

Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使用批查询,批查询在某些情况下能显著提高查询效率. 采用bulk collect可以将查询结果一次性地加载到collections中. 而不是通过cursor一条一条地处理. 可以在select into,fetch into,returning into语句使用bulk collect. 注意在使用bulk collect时,所有的into变量都必须是collections <span style=&quo

Oracle数据库之FORALL与BULK COLLECT语句

   我们再来看一下PL/SQL块的执行过程:当PL/SQL运行时引擎处理一块代码时,它使用PL/SQL引擎来执行过程化的代码,而将SQL语句发送给SQL引擎来执行:SQL引擎执行完毕后,将结果再返回给PL/SQL引擎.这种在PL/SQL引擎和SQL引擎之间的交互,称为上下文交换(context switch).每发生一次交换,就会带来一定的额外开销. FORALL,用于增强PL/SQL引擎到SQL引擎的交换. BULK COLLECT,用于增强SQL引擎到PL/SQL引擎的交换.(前面我们已经

bulk collect into之limit的使用

BULK COLLECT 可以降低 SQL 引擎到 PL/SQL 引擎的上下文交换(context switch)次数,,从而实现数据的高速检索."并不是限制必须一次完成.Oracle 提供了 LIMIT 子句,可以限制每次从表中获取的记录数,测试如下: SQL> select count(*) from t;   COUNT(*) ----------        536 SQL> declare   2    cursor c_t is select * from t;   3

FORALL和BULK COLLECT

参考:http://www.cnblogs.com/hellokitty1/p/4584333.html 用户在通过PLSQL编写程序时,PLSQL通常会在操作上进行交互,当用户通过PLSQL执行一条更新语句时,SQL会将更新后的数据返回给PLSQL,这样用户才可以在PLSQL之中取得更新后的数据,但是如果在PLSQL之中要进行大量的数据操作时,这种方式就会使程序执行性能大大降低. 例如:通过PLSQL执行多行数据更新 1 DECLARE 2 TYPE emp_array_type IS VAR