pl/sql中bulk collect的用法

bulk collect可以将查询结果一次性地加载到collections中,而不用一条一条地处理。在select into,fetch into,returning into语句使用使用bulk collect时,所有的into变量都必须是collections。

create table jy

(

object_id number(12),

object_name varchar2(20),

object_type varchar2(20)

)

在select into语句中使用bulk collect

declare

type object_list is table of jy.object_name%type;

objs object_list;

begin

select object_name bulk collect

into objs

from jy;

for r in objs.first .. objs.last loop

dbms_output.put_line(''|| objs(r));

end loop;

end;

/

在fetch into中使用bulk collect

declare

type objecttab is table of jy%rowtype;

objs objecttab;

cursor cob is

select object_id, object_name, object_type

from jy;

begin

open cob;

fetch cob bulk collect

into objs;

close cob; -- 把结果集一次fetch到collect中,我们还可以通过limit参数,来分批fetch数据

for r in objs.first .. objs.last loop

dbms_output.put_line(' ' || objs(r).object_name);

end loop;

end;

declare

type objecttab is table of jy%rowtype;

objs objecttab;

cursor cob is

select object_id, object_name, object_type

from jy;

begin

open cob;

loop

fetch cob bulk collect

into objs limit 100;--每次取一百条数据这是可以根据你的数据库性能来决定的

exit when cob%notfound;

dbms_output.put_line('count:' || objs.count || ' first:' || objs.first ||

' last:' || objs.last);

for r in objs.first .. objs.last loop

dbms_output.put_line(' objs(r)=' || objs(r).object_name);

end loop;

end loop;

close cob;

end;

在returning into中使用bulk collect

declare

type id_list is table of jy.object_id%type;

ids id_list;

type name_list is table of jy.object_name%type;

names name_list;

begin

delete from jy  returning object_id, object_name bulk collect into ids,

names;

dbms_output.put_line('deleted ' || sql%rowcount || ' rows:');

for i in ids.first .. ids.last loop

dbms_output.put_line('object #' || ids(i) || ': ' || names(i));

end loop;

end;

时间: 2024-11-02 19:54:24

pl/sql中bulk collect的用法的相关文章

PostgreSQL Oracle 兼容性之 - PL/SQL FORALL, BULK COLLECT

Oracle PL/SQL 开发的童鞋,一定对O家的bulk批量处理的性能很是赞赏吧.但是PostgreSQL用户请不要垂涎,作为学院派和工业界的一颗璀璨明珠.开源数据库PostgreSQL,也有对应的批量处理策略哦,而且看起来性能完全不输Oracle.下面是一组LOOP和BULK的性能测试数据 一起来耍耍吧,先看看Oracle怎么耍的. Oracle PL/SQL FORALL, BULK COLLECT 为什么Oracle的PL/SQL过程语言需要bulk处理SQL,看一张图你就明白了,因为

pl/sql中的forall简单测试

之前写过一篇bulk collect的博文,只是对于bulk collect做了简单的实例.http://blog.itpub.net/23718752/viewspace-1289696/ 其实不光是bulk collect,forall对于pl/sql的性能的提升也是相当大的. 可以参见下面的两个图,可以看到其实在pl/sql中,可能很多时候我们所写的pl/sql代码会在sql引擎和plsql引擎建进行上下文的切换,这个过程还是很耗费时间的. 而forall却是相反,是提供一次上下文切换,会

PL/SQL中的多进程通信技术简介

进程 PL/SQL是基于Oracle的一个主流应用程序编程语言,它的特点是将SQL语句与过程化程序开发语言相结合,以实现更为复杂的商业逻辑.本文主要就其中多进程通信进行讨论. 显然,多进程技术是用来提高应用的并发性,进而提高整个系统的执行效率,那么如何在PL/SQL中实现多进程的通信呢?其实,PL/SQL其设计的初衷主要是增强SQL语句的功能,而没有考虑到其他编程语言的高级功能,所以在PL/SQL中实现多进程通信只能借助于Oracle提供的两个开发包:DBMS_PIPE和DBMS_ALERT.

借助两个开发包在PL/SQL中实现多进程通信

PL/SQL是基于Oracle的一个主流应用程序编程语言,它的主要特点是将SQL语 句与过程化程序开发语言相结合,以实现更为复杂的商业逻辑.本文主要就其中 多进程通信进行讨论. 显然,多进程技术是用来提高应用的并发性,进而提高整个系统的执行效率, 那么如何在PL/SQL中实现多进程的通信呢?其实,PL/SQL其设计的初衷主要是增 强SQL语句的功能,而没有考虑到其他编程语言的高级功能,所以在PL/SQL中实现 多进程通信只能借助于Oracle提供的两个开发包:DBMS_PIPE和DBMS_ALE

Oracle中PL/SQL中if语句的写法介绍

以下是对Oracle中PL/SQL中if语句的写法进行了详细的分析介绍,需要的朋友可以过来参考下   复制代码 代码如下: /* If语句: 判断用户输入的数字. */ set serveroutput on --接收键盘输入 accept num prompt '请输入一个数字:'; declare   --将屏幕输入的数字付给变量   pnum number := # begin   if pnum = 0 then dbms_output.put_line('您输入的是0');   end

pl/sql中操作DML语句

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 INSERT     DECLARE  v_empno emp.empno%TYPE := &empno;  v_ename emp.ename%TYPE := '&ename';  v_salary emp.sal%TYPE := &sal;  BEGIN  INSERT INTO emp(empno,ename,s

Oracle或者Pl/Sql中001与1一样吗?

今天写了一个插入语句,往表C中插入数据.insert into 表名(列名) values () where A.列aa=B.列bb;      但半天没反应,select aa from A;select bb from B,发现存在相等的值      A中的aa是1,2,3:B中是001,002,003 解决:把1改为001,2改为002,3改为003后问题解决,从此可以看出001与1在Oracle或者Pl/Sql中是不一样的!     这个问题很可能是由于在数据库中这个字段是字符型的,导致

insert语句在pl/sql中替换数据可以执行,但是java中却报错

问题描述 insert语句在pl/sql中替换数据可以执行,但是java中却报错 java语句: public int initiating(String title, String content, String numberLimit,String fkCustomerId) { String pkId = "44"; String sql="insert into ACTIVITY_INFO (pk_id,title,content,fk_customer_id,num

SQL中case when的用法详解

Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 1.语法 CASE input_expression_r WHEN when_expression_r THEN result_expression_r [ ...n ] [ ELSE else_result_expression_r ] END 2.实例   CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END Case搜索函数 1.语法 CASE WH