`
234390216
  • 浏览: 10194275 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:460821
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1771877
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1395481
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:393917
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:678253
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:529320
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1178774
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:462010
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150169
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:66890
社区版块
存档分类
最新评论

Oracle——13集合

阅读更多


PL/SQL语言的集合类似于数组,是管理多行数据必须的结构体。集合就是列表,可能有序,也可能无序。PL/SQL的集合类型有:联合数组、嵌套表和可变数组三种。

 

1、联合数组

联合数组类似于C语言中的数组。

(1)语法格式如下:

 

		type typeName
		is table of arrayType index by binary_integer;
 

 

其中,typeName表示新类型的类型名,arrowType表示要定义的联合数组的类型。

假设有一个表t_module(name varchar(20)),那么我们可以针对其name字段建立如下联合数组:

 

		type moduleName is table of t_module.name%type index by binary_integer;
 

 

(2)元素赋值

示例代码如下:

 

			declare
				type NameArray
				is table of varchar(20) index by binary_integer; /*定义联合数组NameArrow*/
				na NameArray; /*声明联合数组NameArrow的一个变量*/
			begin
				na(1) := 'Hello'; /*给联合数组赋值*/
				na(2) := 'World'; /*给联合数组赋值*/
				na(5) := 'Oracle'; /*给联合数组赋值*/
				dbms_output.put_line(na(1) || na(2));
			end;
 

 

注意:

a.联合数组中的元素不是按特定顺序排列的,元素的下标也是可以无序的,所以nameArrow(-100) := 'Hello'也是可以的。

b.index的数据类型是binary_integer类型,所以index的范围为-214483647~+214483647。

c.当调用不存在的元素时将会出错。

2、嵌套表

嵌套表的声明和联合数组的声明十分类似。语法格式如下:

 

		type typeName is table of arrayType [not null]
 

嵌套表的声明与联合数组的唯一不同是没有index by binary_integer子句。

(1)嵌套表的初始化

嵌套表的初始化和联合数组的初始化是不同的。在声明了联合数组之后,再声明一个联合数组对应的变量,如果此时没有给该变量赋值,那么该变量对应的联合数组就是一个空的,在以后的语句中还可以给该联合数组添加元素;而如果在声明了嵌套表变量时没有初始化,则该嵌套表将自动初始化为null,并且是只读的。如果在后续代码中继续向该嵌套表中添加元素,就会报错,但是可以修改已经存在的元素的值。

以下是一个嵌套表的初始化示例:

 

		declare
			type NameArray is table of varchar(20);
			na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu'); /*在声明的时候即初始化该嵌套表*/
			begin
				for nameIndex in 1..3 loop
					dbms_output.put_line(na(nameIndex));
				end loop;
			end;
 

(2)元素序列

嵌套表与联合数组十分相似,只是嵌套表在结构上是有序的,而联合数组是无序的。嵌套表元素的index是从1开始递增的。

3、可变数组

先来看可变数组的语法格式:

 

		type typeName is varray | varying array(maximunSize) of arrayType [not null]
 

maximunSize是指可变数组的最大值,arrayType表示数组元素的类型。

可变数组的可变是指当定义了数组的最大容量后,数组元素的个数可在这个范围内进行变动。

与嵌套表一样,可变数组也需要初始化,在初始化后也只能修改已经存在的元素值,初始化时赋值的数量必须不超过最大容量。

以下是一段示例代码:

 

		declare
			type NameArray is varray(10) of varchar(20);
			na NameArray := NameArray('ZhangSan', 'LiSi', 'WangWu');
		begin
			for nameIndex in 1..3 loop
				dbms_output.put_line(na(nameIndex));
			end loop;
		end;
 

4、集合的属性和方法

(1)count属性

count属性用于返回集合中数组元素的个数。

示例代码:

na.count; /*在上面例子中调用该语句将返回3*/

(2)delete方法

delete方法用于删除集合中的一个或多个元素。由于delete方法删除的是固定位置的元素,所以对应可变数组来说是没有

delete方法的。delete方法有3中形式:

delete:不带参数的delete方法将删除整个集合。

delete(index):将删除集合中第index个位置的元素。

delete(start, end):将删除集合中从start到end的元素。

注意:

a.执行delete方法后,集合的count值将会立即发生改变。

b.执行delete操作后,其他元素的index不会发生改变。

c.当要删除的元素不存在时,delete不会报错,而是跳过该元素,继续执行下一操作。

(3)exists方法

exists方法用于判断集合中指定位置的元素是否存在。

语法格式如下:

exists(index);

如果index位置的元素存在即返回true,否则就是false,如果index大于集合的最大范围,则返回false。

(4)extend方法

extend方法用于将元素添加到集合的末端,由于联合数组的随意性,所以该方法不能对联合数组使用,有以下几种形式:

extend:不带参数的extend方法将添加一个null元素到集合的末端

extend(n):将添加n个null元素到集合的末端。

extend(n, x):将添加n个x位置的元素到集合的末端。

(5)first属性和last属性

first属性用于返回集合中的第一个元素所在的位置,last属性用于返回集合中的最后一个元素所在的位置。

(6)limit属性

limit属性用于返回集合的最大容量,该属性只有对可变数组才有返回值,对其他的则返回null。

(7)next方法和prior方法

next方法和prior方法都有一个表示index的参数,语法格式为:

next(index);

prior(index);

next(index)返回集合中index后一个元素的位置,而prior(index)方法则返回集合中index位置前一个元素的位置,如果对应返

回的位置不存在则返回null。

(8)trim方法

trim方法用于从集合的末端删除元素,由于联合数组的随意性,所以不能对联合数组使用trim方法,有以下两种形式:

trim:不带参数的trim从集合末端删除一个元素。

trim(n):从集合末端删除n个元素,其中n不能超出集合的count数。

1
1
分享到:
评论
1 楼 yanglover 2012-07-09  
这个在实际应用中的情景是什么?

相关推荐

    Oracle数据库教程

    Oracle数据库教程1、ORACLE 实例——包括内存结构与后台进程 2、ORACLE 数据库——物理操作系统文件的集合 3、内存结构的组成 4、后台进程的作用 5、数据库的物理文件 6、各种逻辑结构

    oracle数据库基本概念——我的Oracle学习之路

    关系数据库是按照二维表结构方式组织的数据集合,每个表体现了集合理论中定义的数学概念————关系。 Oracle数据库(Database)是一个数据容器,它包含了表、索引、视图、过程、函数、包等对象,并对这些对象进行...

    oracle四大宝典之2:Oracle基本管理

    本篇主要介绍Oracle 数据库体系结构。体系结构主要介绍下面的内容: 1、ORACLE 实例——包括...2、ORACLE 数据库——物理操作系统文件的集合 3、内存结构的组成 4、后台进程的作用 5、数据库的物理文件 6、各种逻辑结构

    Oracle SQL高级编程

    第4章 SQL是关于集合的 95 第5章 关于问题 116 第6章 SQL执行计划 137 第7章 高级分组 170 第8章 分析函数 197 第9章 Model子句 225 第10章 子查询因子化 254 第11章 半联结和反联结 292 第12章 索引 334 第13章 ...

    oracle 11g安装配置

    —— 在RHEL 6.x中安装时,ksh需改用5.x的软件包 准备工作: yum install yum* yum groupinstall “X 窗口系统” “桌面” “桌面平台” “中文支持” “开发工具” [root@dbserver ~]# yum -y install java-* ...

    ORACLE 体系结构

    ORACLE 体系结构 1、 ORACLE 实例——包括内存结构与后台进程 2、 ORACLE 数据库——物理操作系统文件的集合 3、 了解内存结构的组成 4、 了解后台进程的作用 5、 了解数据库的物理文件 6、 解释各种逻辑结构

    Oracle Database 11g初学者指南--详细书签版

     ·核心概念——oracle database 11g主题呈现在按逻辑组织的章节中  ·主要内容——每章要介绍的具体内容列表  ·实践练习——演示如何应用在每章学到的关键技术  ·学习效果测试——对学习效果的快速自我评估 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    Oracle分析函数

    Oracle分析函数——函数列表 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算一个组和数据窗口内表达式的...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    核心概念——Oracle Database 11g主题呈现在按逻辑组织的章节中 主要内容——每章要介绍的具体内容列表 实践练习——演示如何应用在每章学到的关键技术 学习效果测试——对学习效果的快速自我评估 注意——与所介绍...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    PostgreSQL 管道函数(Pipelined Table Function)——兼容oracle

    在oracle中管道函数是用来返回行集合的,我们可以像查询物理表一样查询它或者将它的值赋给其它集合变量。 oracle中的管道函数有以下几个特点: 管道函数为并行执行,在普通的函数中使用dbms_output输出的信息,需要...

    数据库课程设计——图书管理系统.doc

    目前,绝大多数流 行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准. SQL语言有以下几个优点: 1. 非过程化语言 SQL是一个非过程化的语言,因为它一次处理一个记录,...

    收获不知Oracle

    上篇 开启惊喜之门——带意识地学Oracle 第1章意识,少做事从学习开始 2 1.1 选择先学什么颇有学问 2 1.1.1 梁老师课堂爆笑开场 2 1.1.2 看似跑题的手机分类 4 1.1.3 学什么先了解做什么 5 1.2 善于规划分类才有...

    数据库技术——概述(数据库,数据库管理系统,数据库系统区别)

    Oracle DB2——用于企业中 Microsoft SQL Server Sybase:第一个提出C/S体系结构 开源数据库 Mysql Ingress 数据库基本概念 数据(Data) 定义:描述事物的符号记录 数据库中的存储对象,包括数字,文字,图形,图像...

    Oracle 10g 开发与管理

    补充资料——oracle安装时出现的问题 12 第二讲 Oacle数据库体系结构 14 一. 物理存储结构——(数据库载体) 14 1.数据文件(.DBF) 14 2.日志文件 (.Log) 14 1) 日志文件 15 2) 数据库工作模式 15 3.控制文件...

    数据库的基本概念——我的Oracle学习之路

    数据库(Data Base,简称DB)是长期存储在计算机内、有组织的、可共享的、统一管理的相关数据的集合。 数据库系统 数据库系统(Data Base System,简称DBS)是指在计算机系统中引入数据库后的系统构成。 数据库系统...

    PL_sql8.0.1,软件加破解注册机,还有安装说明。

    报告 ——PL/SQL Developer提供内置的报告功能,您可以根据程序数据或Oracle字典运行报告。PL/SQL Developer本身提供了大量标准报告,而且您还可以方便的创建自定义报告。自定义报告将被保存在报告文件中,进而包含...

Global site tag (gtag.js) - Google Analytics