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    type typ_t is table of
c_t%rowtype

  4    index by
binary_integer; 

  5    v_type_t
typ_t;

  6    v_row
pls_integer;

  7  begin

  8    open
c_t;

  9    loop


10    fetch c_t bulk collect into v_type_t


11        limit 100;


12    exit when v_type_t.count = 0;


13   dbms_output.put_line(v_type_t.count);


14    v_row :=v_type_t.first;


15    while(v_row is not null)


16     loop


17  --  
dbms_output.put_line(v_type_t(v_row).empno);


18       null;


19       v_row
:=v_type_t.next(v_row);


20     end loop;


21    end loop;


22    close c_t;


23  end;


24  /

100

100

100

100

100

36

PL/SQL procedure successfully
completed.

bulk collect into之limit的使用

时间: 2024-10-13 00:41:25

bulk collect into之limit的使用的相关文章

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;

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引擎的交换.(前面我们已经

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

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

2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效

如果表结构只对应一个字段,可以 select col1 bulk collect into 变量,不用游标循环,简洁高效 create or replace function get_airway_subpoint(awid in number) return airway_subpnts_tab is --CREATE OR REPLACE TYPE AIRWAY_SUBPNTS_TAB  as table of number(11) v_ptns airway_subpnts_tab; --

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 emp

PLSQL NOTE--------提高性能的BULK COLLECT语句和FORALL语句

提高性能的BULK COLLECT语句和FORALL语句 pl/sql向sql引擎发送sql语句执行,然后SQL向pl/sql 返回结果数据.可以使用pl/sql的大批量sql特性来降低sql和pl /sql之间的通信开销.FORALL语句将INSERT或UPDATE或DELETE批次处理,BULK COLLECT子句带回批结果.如果,DML语句影响四个或更多个数据库行,使用bulk sql(批量SQL)可以显著提高性能. 1.FORALL语句的使用 但是,FORALL语句只能重复单独一条 DM