`

Oracle数据库之PLSQL集合

阅读更多
--==================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语句集合(3)-PLSQL

    数据库开发 Oracle数据库 SQL开发教程 全套PPT课件 共20个章节.rar

    数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf ...

    完整版Oracle11数据库教程课件 全套PPT课件资源集合 全套12个章节.rar

    完整版Oracle11数据库教程课件 第9章_PLSQL编程基础(共59页).ppt 完整版Oracle11数据库教程课件 第10章_存储过程_函数_触发器(共32页).ppt 完整版Oracle11数据库教程课件 第11章_权限的概述(共32页).ppt 完整...

    plsql游标、集合简单使用

    oracle数据库里plsql游标、集合及对象的简单使用,适合初学者查看

    PLSQL无需安装oracle连接数据库

    无需安装oracle,直接解压后在PLSQL上配置一下就可以连接你的oracle数据库,为你节省大量空间。配有集合个人经验写成的安装步骤和处理方法,保证可以完成安装。相关操作有图和详细解释。希望成功连接的朋友给个好评...

    Oracle 10g SQL操作和PLSQL所有命令集合

    Oracle 10g 的操作命令大全数据库的建立以及操作 表的操作,查询等,plsql的说明以及全部常用的命令。很全的。

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

    PLSQL用户指南与参考.pdf

    第五章 PL/SQL 集合与记录 第六章 PL/SQL 与 Oracle 间交互 第七章 控制 PL/SQL 错误 第八章 PL/SQL 子程序 第九章 PL/SQL 包 第十章 PL/SQL 对象类型 第十一章 本地动态 SQL 第十二章 PL/SQL 应用程序性能调优

    PLSQL详细说明手册

    众所周知,PL/SQL是用来从各种平台访问Oracle数据库的高级程序设计语言。本书原版自出版以来,深受专业人员欢迎,仅在美国市场的销售量就多达46 000多本。本书不仅为开发健壮的、基于Web的应用提供了深入的信息,...

    oracle全套工具包

    oracle数据库全套资源,个人已验证安装访问没问题,包括oracle数据库,oracle客户端,toad,sqlplus工具,以及数据库,工具安装手册,汉化工具等,满足oracle数据库所有操作。

    ORACLE SQL PLSQL

    1-1 pl/sql可以做的工作: 1. 用pl/sql的存储过程和数据库触发器实现至关重要的商业规则。...7.plsql是oracle数据库产品的内置语言,不是一个孤立的语言。 8.是一种高性能的语言。 9.pl/sql运行过程

    oracle_PLSQL_语法详细手册

    表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小...

    oracle_8i_pl_sql高级程序设计

    众所周知,PL/SQL是用来从各种平台访问Oracle数据库的高级程序设计语言。本书原版自出版以来,深受专业人员欢迎,仅在美国市场的销售量就多达46 000多本。本书不仅为开发健壮的、基于Web的应用提供了深入的信息,...

    数据库操作集合 包含入门资料 错误码 参考教材

    多种数据库操作集合,很好的参考资料,包含入门资料 错误码 参考教材

    Oracle PL SQL程序设计 上 第五版(代码示例)

    《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...

    Oracle11gPLSQLProgramming

    通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...

    PLSQL 文档集合包(语法 异常 指针 游标 存储过程...)

    .... . . . 5.1 数据库模式对象 5.2 索引 5.3 同义词 5.4 数据库链接 . . . . .

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g ...

    精通Oracle 10g SQL和PL/SQL

    sql是关系数据库的基本操作语言 它是应用程序与数据库进行交互操作的接口 pl/sql是oracle特有的编程语言 它不仅具有过程编程语言的基本特征 循环 条件分支等 而且还具有对象编程语言的高级特征 重载 继承等 ...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

    读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型...

Global site tag (gtag.js) - Google Analytics