--==================collection====================== --是按某种顺序排列的一组元素,所有的元素有相同的数据类型,每个元素有唯一一个下标标识在这一组元素中的位置. --集合的出现是为了遵循面向对象的编程风格,而且 ,相对于两个表,存储在集合中的数据可以被数据库更快的访问 --Collection主要有3类: -------关联数组:键值对的集合,其中键是唯一的,用于确定数组中对应的值,类似java中的hash表, -----------------键可以是整数或字符串.第一次使用键来指派一个对应的值就是添加元素,而后续这样的操作就是更新元素. -------嵌套表(后续补齐) -------Varry数组,变长数组(后续补齐) --============首先看看关联数组的使用================ ----TYPE 关联数组的名字 is table of 关联数组的存储元素类型[not null] ---- index by [binary_integer][pls_integer][varhcar2(size)]; declare --声明类型 type t_indtab is table of number index by binary_integer; v_indtab t_indtab ;--声明变量 v2 v_indtab%type; -- v2和v1 同类型 begin v_indtab(1) :=1; v_indtab(5) :=3; v2(6) :=6; v2(6) :=10; dbms_output.put_line(v_indtab(5));-- 3 dbms_output.put_line(v_indtab(6)); -- 10 end; ----关联数组的方法: -------exists(n) :判断第n个元素是否存在. -------count();返回联合数组的元素个数,不包括被删除的元素.对于空的联合数组,返回值也是0 ------- 在使用count()方法前,建议你先用exists来判断一下.这样可以避免抛出异常. -------first/last:返回最小和最大下标号,如果collection为空,则返回null; -------prior(n)/next(n):返回第n个元素的前一个元素的下标和后一个元素的下标.如果不存在,则返回null; -------trim(n): 从最后一个元素删除n个元素.不能用于关联数组 -------delete:删除所有元素 -------delete(n):删除第n个元素 -------delete(m,n):从第m个元素删除到第n个元素. ------- 关联数组的遍历(for循环) declare type t_ind_tab is table of number index by binary_integer;--声明类型 v_indtab t_ind_tab; --定义变量 begin --赋值 v_indtab(1) :=1; v_indtab(5) :=3; v_indtab(6) :=4; for i in v_indtab.first .. v_indtab.last LOOP if v_indtab. exists(i) then dbms_output.put_line(v_indtab(i)); end if ; end loop; end; ------- 关联数组的遍历(while循环) declare type ind_tab is table of varchar2(5) index by varchar2(4); v_indtab ind_tab; v_index varchar2; begin --赋值 v_indtab('a') :='1'; v_indtab('b') :='3'; v_indtab('c') :='4'; v_index := v_indtab.first; while v_index <= v_indtab.last LOOP -- 如果当前的索引下标 <= 最后一个下标 dbms_output.put_line(v_indtab(v_index)); v_index :=v_indtab.next(v_index); --通过next函数获取当前索引的下一个下标 end loop; end; --==========批量绑定========================== --采用bulk collect可以将查询结果一次性地加载到collections中, --而不是通过cursor一条一条的处理, 通过bulkcollect减少loop处理的开销. --可以在select into ,fetch into ,returning into语句使用bulkcollect. --注意在使用bulk collect时,所有的into变量都必须是collections. -- 打印每个emp的ID,ENAME; declare --声明record类型 type t_emp_rec is record( id emp.deptno%type, name emp.ename%type ); --声明关联数组的类型, 存储是元素师 record类型 type emp_indtab is table of t_emp_rec index by binary_integer; v_emp emp_indtab; --定义关联数组的变量 begin --BULK COLLECT则一次即可提取所有行并绑定到记录变量。即谓批量绑定 select deptno , ename bulk Collect into v_emp -- into的变量:必须是集合. from emp where 1 = 1 ; for i in v_emp.FIRST .. v_emp.LAST LOOP --用for操作集合 -- v_emp是关联数组.访问其中的某一个元素 v_emp(i); ,不能用v_emp[i]; dbms_output.put_line(v_emp(i).id || ':'|| v_emp(i).NAME); end loop; end; -- 如果数据量较大,可以采用Limit来限制fetch的数量 -- 重复上述问题:打印每个emp的ID,ENAME;(每次取出5条记录到bulk collect; declare cursor emp_cur is --游标变量 查询所有的记录 select deptno , ename from emp ; type emp_rec is record ( --声明类型 id emp.deptno%type, name emp.ename%type ); type emp_indtab is table of emp_rec index by binary_integer; v_emp emp_indtab; --定义关联数组的变量,没有初始化 v_limit PLS_INTEGER := 5; --定义了一个变量来作为limit的值 begin open emp_cur; --执行sql LOOP fetch emp_cur bulk collect into v_emp limit v_limit; exit when v_emp.count = 0;--此时游标退出使用了v_emp.COUNT for i in v_emp.FIRST .. v_emp.LAST LOOP dbms_output.put_line(v_emp(i).id || ':'|| v_emp(i).NAME); end loop; dbms_output.put_line('---------------------'); end loop; close emp_cur;--关闭 end;
相关推荐
Oracle数据库维护常用SQL语句集合(3)-PLSQL
数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf ...
完整版Oracle11数据库教程课件 第9章_PLSQL编程基础(共59页).ppt 完整版Oracle11数据库教程课件 第10章_存储过程_函数_触发器(共32页).ppt 完整版Oracle11数据库教程课件 第11章_权限的概述(共32页).ppt 完整...
oracle数据库里plsql游标、集合及对象的简单使用,适合初学者查看
无需安装oracle,直接解压后在PLSQL上配置一下就可以连接你的oracle数据库,为你节省大量空间。配有集合个人经验写成的安装步骤和处理方法,保证可以完成安装。相关操作有图和详细解释。希望成功连接的朋友给个好评...
Oracle 10g 的操作命令大全数据库的建立以及操作 表的操作,查询等,plsql的说明以及全部常用的命令。很全的。
读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...
第五章 PL/SQL 集合与记录 第六章 PL/SQL 与 Oracle 间交互 第七章 控制 PL/SQL 错误 第八章 PL/SQL 子程序 第九章 PL/SQL 包 第十章 PL/SQL 对象类型 第十一章 本地动态 SQL 第十二章 PL/SQL 应用程序性能调优
众所周知,PL/SQL是用来从各种平台访问Oracle数据库的高级程序设计语言。本书原版自出版以来,深受专业人员欢迎,仅在美国市场的销售量就多达46 000多本。本书不仅为开发健壮的、基于Web的应用提供了深入的信息,...
oracle数据库全套资源,个人已验证安装访问没问题,包括oracle数据库,oracle客户端,toad,sqlplus工具,以及数据库,工具安装手册,汉化工具等,满足oracle数据库所有操作。
1-1 pl/sql可以做的工作: 1. 用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。...7.plsql是oracle数据库产品的内置语言,不是一个孤立的语言。 8.是一种高性能的语言。 9.pl/sql运行过程
表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小...
众所周知,PL/SQL是用来从各种平台访问Oracle数据库的高级程序设计语言。本书原版自出版以来,深受专业人员欢迎,仅在美国市场的销售量就多达46 000多本。本书不仅为开发健壮的、基于Web的应用提供了深入的信息,...
多种数据库操作集合,很好的参考资料,包含入门资料 错误码 参考教材
《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...
通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...
.... . . . 5.1 数据库模式对象 5.2 索引 5.3 同义词 5.4 数据库链接 . . . . .
第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g ...
sql是关系数据库的基本操作语言 它是应用程序与数据库进行交互操作的接口 pl/sql是oracle特有的编程语言 它不仅具有过程编程语言的基本特征 循环 条件分支等 而且还具有对象编程语言的高级特征 重载 继承等 ...
读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...