`

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数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    通过深入学习和实践这些内容,开发者能够熟练掌握在Oracle数据库中使用PLSQL进行编程,并能有效地创建和管理存储过程,以提高数据库应用的效率和质量。在实际工作中,了解这些知识点对于数据库管理和开发工作至关...

    oracle数据库和plsql语法练习

    Oracle数据库是一种广泛应用于企业级应用的高性能关系型数据库系统,由甲骨文公司开发和维护。它支持复杂的事务处理、数据存储和管理,是许多企业的首选数据库解决方案。PL/SQL,全称Procedural Language/Structured...

    数据库oracle中PLSQL语句简介及使用方法的举例说明

    Oracle数据库中的PL/SQL(Procedural Language/Structured Query Language)是一种强大的编程语言,它将SQL的查询功能与过程式编程语言的控制结构相结合,为数据库管理提供了更高级别的抽象和控制。PL/SQL是Oracle...

    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数据库

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,而PL/SQL是Oracle专为数据库操作设计的一种过程式语言。本篇文章将深入探讨Oracle数据库与PL/SQL的使用,旨在提供一个全面的操作指南。 PL/SQL(Procedural...

    oracle数据库整体学习资料

    这个"Oracle数据库整体学习资料"压缩包包含了多个PPT和文档,旨在为学习者提供一个全面了解和掌握Oracle数据库的资源集合。 首先,我们从`Oracle体系结构简介.ppt`开始,这个文件会详细介绍Oracle数据库的核心组成...

    PLSQL操作ORALCE数据库

    总结来说,PLSQL是Oracle数据库编程的核心工具,结合PLSQL Developer这样的专业开发环境,可以高效地管理和操作Oracle数据库,实现各种复杂的数据处理任务。无论是初学者还是经验丰富的开发者,掌握PLSQL都是提升...

    《Oracle PLSQL 从入门到精通》.zip

    Oracle PLSQL,全称为“Procedural Language/Structured Query Language”,是Oracle数据库系统中的一个强大编程语言,它结合了SQL的查询能力与过程性编程语言的功能。本资料《Oracle PLSQL 从入门到精通》旨在帮助...

    oracle进阶之PLSQL编程.rar_oracle_oracle 编程_应用于java程序

    Oracle数据库是全球广泛使用的数据库管理系统之一,而PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库专有的编程语言,它结合了SQL的查询功能和传统的过程式编程语言的特点,使得数据库管理...

    oracle11g 之plsql

    Oracle 11g是甲骨文公司发布的一款企业级数据库管理系统,而PL/SQL则是Oracle数据库内置的一种结构化查询语言,专门用于处理Oracle数据库中的数据。这篇文章将深入探讨Oracle 11g中的PL/SQL编程,包括其核心概念、...

    PLSQL.rar_oracle_oracle ppt_oracle projects_plsql ppt_plsql proj

    标题中的"PLSQL.rar_oracle_oracle ppt_oracle projects_plsql ppt_plsql proj"暗示了这个压缩包包含的内容主要与Oracle数据库的PL/SQL编程语言有关,可能是一份包含PPT演示文稿和项目的资源集合。Oracle是全球广泛...

    ORACLE数据库设计(SQL&PLSQL)

    Oracle数据库设计是IT领域中的核心技能之一,尤其对于数据库管理员和开发人员来说至关重要。Oracle是一种关系型数据库管理系统(RDBMS),它提供了SQL(结构化查询语言)和PL/SQL(过程化语言/SQL)来实现数据的管理...

    Oracle PLSQL集合

    ### Oracle PL/SQL 集合详解 #### 12.1 集合概述 在深入了解Oracle PL/SQL中的集合之前,先回顾一下与集合相关的概念和术语,包括不同集合类型的描述及其示例。 ##### 12.1.1 集合概念和术语 **元素和索引值** -...

    Oracle9i+PLSQL从入门到精通

    而PL/SQL作为Oracle数据库的核心编程语言,其重要性不言而喻。为了让更多的Oracle开发者能够熟练掌握并运用Oracle9i及其PL/SQL语言,谈竹贤、王必赵景亮等编著了《Oracle9i+PLSQL从入门到精通》一书,为初学者到中级...

    Oracle+Database+11g+PLSQL编程实战(书+源码)

    Oracle数据库11g是Oracle公司推出的数据库管理系统的一个重要版本,具有高效、稳定和安全的特点,广泛应用于企业级数据存储和管理。PL/SQL是Oracle专为数据库操作设计的一种过程式编程语言,它与SQL紧密集成,提供了...

    介绍OracleSQL和PLSQL

    Oracle SQL和PL/SQL是两种在Oracle数据库管理系统中广泛使用的编程语言,它们在数据库管理和开发领域扮演着核心角色。Oracle SQL是SQL标准的一个实现,主要用于查询、操作和管理Oracle数据库中的数据,而PL/SQL是一...

    oracle数据库教程文档.zip

    本教程文档集合提供了全面的学习资源,涵盖了从基础到高级的Oracle技术知识,旨在帮助读者深入理解并掌握Oracle数据库的使用。 首先,让我们从“第一章--初步体验Oracle管理数据.doc”开始。这一章节通常会介绍...

    Oracle11g PLSQL Programming(pdf & source)

    Oracle11g PL/SQL Programming 是一本专注于Oracle数据库编程的重要书籍,主要针对PL/SQL语言进行深入探讨。PL/SQL是Oracle数据库系统中用于结构化编程的语言,它结合了SQL查询功能与传统的过程式编程语言特性,使得...

Global site tag (gtag.js) - Google Analytics