ORACLE
的集合分为三类
1.index_by
表
:
类似于
C
语言中的数组
语法格式
:
TYPE tabletype
IS
TABLE OF TYPE INDEX BY BINARU_INTEGER
说明
:
tabletype
表示所定义的新类型的类型名
,type
是要定义的
index_by
表的类型
.
例
:
TYPE xs_name
--
类型名
IS
TABLE OF XS.XM%TYPE
INDEX BY BINARU_INTEGER;/*INDEX
的类型只能是
BINARU_INTEGER*/
v_name xs_name;
--
声明变量
在声明了类型和变量后
,
就可以用下列语句使用
index_by
表中的单个元素
.
v_name(index);
说明
:
index
是指表中第几个元素
注意
:
index
的数据类型属于
BINARU_INTEGER
1)
元素赋值
可以用下面的语句给表中的元素赋值
BEGIN
v_name(1):=’qnma’;
v_name(2):=’cjh’;
v_name(-2):=’huiwen’;--
合法
END;
注意
:
index_by
表中的元素不是按特定的顺序排序的
.
这与
C
语言不同
.index_by
表元素个数只受
BINARU_INTEGER
类型的限制
,
即
index
的范围是
-214483647~~+214483647.index
只要在此范围内就是合法的
.
2)
调用不存在的元素
调用任何元素前
,
必须首先给该元素赋值
.
如下所示
:
DECLARE
TYPE studytab
IS TABLE OF VARCHAR2(20) INDEX BY BINARU_INTEGER
;
v_studytab studytab ;
BEGIN
FOR v_count IN 1..5 LOOP
v_studytab(v_count):= v_count*10;
END LOOP;
FOR v_count IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE(v_studytab(v_count));
END LOOP;
END;
2.
嵌套表
:
嵌套表与
index_by
非常相似
,
唯一不同的就是没有
INDEX BY BINARU_INTEGER
1)
嵌套表的初始化与
index_by
表完全不同
.
在声明了类型之后
,
再声明一个
index_by
表变量类型
.
如果没有给表赋值
,
那么此表就是一个空的
index_by
表
.
但是以后可以往
index_by
表中加入元素
;
而声明了嵌套表变量类型时
,
如果嵌套表中没有任何元素
,
那么它就会自动初始化为
NULL,
并且是只读的
.
如果还想往嵌套表里加入元素
,
系统就会报错
.
如
:
DELARE
TYPE studytab
IS
TABLE OF VARCHAR(20);
v_studytab
studytab:=studytab(‘Tom’,’jack’,’ROSE’);
BEGIN
FOR v_count IN 1..3 LOOP
DBMS_OUTPUT.PUT_LINE(v_studytab(v_count);
END LOOP;
END;
2)
元素序列
:index_by
表中的元素是无序的
,
而嵌套表中的元素是有序的
.
嵌套表元素的
index
是从
1
开始依次递增的
.
3.
可变数组
语法格式
:
DECLARE type_name
IS
VARRAY |VARRAY ARRAY
(maximun _size)OF
element_type [NOT NULL]
说明
:
type_name
是可变数组的名称
,maxmun_size
是指可变数组元素个数的最大值
.element_type
是数组元素的数据类型
.
可变数组的可变指的是定义了数组的最大上限后
,
数组元素的个数可以在这个最大上限内变化
,
但是不得超过最大上限
.
当数组元素的个数超过了最大上限后
,
系统就会报错
.
以下定义了一个可变数组
:
DECLARE
TYPE dates
IS VARCHAY(7) OF
VARCHAR2(10);
TYPE months
IS VARRAY(12) OF VARCHAR2(10);
与嵌套表一样
,
可变数组也需要初始化
.
初始化需要注意的是
:
赋值的数量必须保证不大于可变数组的最大上限
.
以下是完整实例
:
DECLARE
TYPE dates
IS VARCHAY(7) OF
VARCHAR2(10);
TYPE months
IS VARRAY(12) OF VARCHAR2(10);
v_dates dates:=dates(‘Monday’,’Tuesday’,’Wednesday’) ;
BEGIN
DBMS_OUTPUT.PUT_LINE(v_dates(1));
DBMS_OUTPUT.PUT_LINE(v_dates(2));
DBMS_OUTPUT.PUT_LINE(v_dates(3));
END;
有关集合中的方法
:
index_by
表
,
嵌套表
,
可变数组本身都是对象
,
因此它们都有自己的属性和方法
.
集合的属性和方法的调用同其他对象调用一样
:Object.Attribute
或
Object.Method.
下面是集合类常用的属性和方法
:
1.COUNT
属性
:
返回集合中的数组元素个数
DECLARE
TYPE name IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
TYPE pwd IS TABLE OF VARCHAR2(20);
TYPE dates VARRAY(7) OF VARCHAR2(20);--
容量为
7
v_name name;
v_pwd pwd:=pwd(‘10000’,’12345’,’22’,’yes’,’no’);
v_dates dates :=dates(‘Monday’,’Sunday’);
BEEGIN
v_name(1):=’Tom’;
v_name(-1):=’Jack;
v_name(4):=’Rose;
DBMS_OUTPUT.PUT_LINE(‘The index_by count is :’||v_name.count);
DBMS_OUTPUT.PUT_LINE(‘The nested count is :’||v_pwd.count);
DBMS_OUTPUT.PUT_LINE(‘The varray count is :’||v_dates.count);--
返回的是可变数组的实际元素个数
END;
执行结果为
:
The index_by count is:3
The nested count is:5
The varray count is:2
2.DELETE
方法
DELETE
可以删除集合中的一个或多个元素
,
需要注意的是
,
由于
DELETE
方法执行的删除操作的大小固定
,
所以对于可变数组来说没有
DELETE
方法
.DELETE
方法有
3
种方式
1)DELETE :
不带参数的
DELETE
方法
,
表示将整个集合删除
2)DELETE(x):
将集合中第
x
个位置的元素删除
.index
起始位置从
1
开始
.
3)DELETE(x,y):
将集合中从第
x
个元素到第
y
个元素之间的所有元素删除
.
注意
:
执行
DELETE
方法后
,
集合的
COUNT
值将会立刻发生变化
,
而且当删除的元素不存在时
,
系统不会报错
,
而是跳过此元素
,
继续执行下一步操作
.
3.EXISTS
属性
:
用于判断集合中的元素是否存在
.
语法格式为
:
EXISTS(X)
--
判断位于
X
位置的元素是否存在
,
存在返回
TRUE,
否则返回
FALSE
注意
:
即使是该位置是
NULL,
也会返回
TRUE
4.EXTEND
方法
:
用于将元素加到集合的末端
.
具体有以下
3
种方式
:
1)EXTEND:
不带参数的
EXTEND
是将一个
NULL
元素加入到集合的末端
2)EXTEND(x):
将
x
个
NULL
元素加入到集合的末端
3)EXTEND(x,y):
将
x
个
y
的元素加入到集合到末端
.
注意
:
由于
index_by
表的随意性
,
因此
EXTEND
方法只针对嵌套表和可变数组有效
.
5.FIRST
和
LAST
属性
:FIRST
用来返回集合的第一个元素
,LAST
用于返回集合中的最后一个元素
.
6.LIMIT:LIMIT
用来返回集合的最大元素个数
,
由于嵌套表没有有限
,
所以嵌套表使用
LIMIT
时
,
总是返回
NULL
注意
:COUNT
是返回集合中的实际个数
,
而
LIMIT
是返回集合中的容量
.
7.NEXT
和
PRIOR
属性
:
使用
NEXT,PRIOR
时
,
它的后面都会跟一个参数
语法格式
:
NEXT(X):
表示的返回位置为
X
处的元素后面的那个元素
,
也就是返回位置为
X
的下一个元素
PRIOR(X):
同上一个相反
,
返回的是位置为
X
的前一个元素
.
通常使用
NEXT
和
PRIOR
与
FIRST
和
LAST
一起使用
,
用来处理循环
.
例
:
DECLARE
TYPE pwd IS TABLE OF VARCHAR2(20);
v_pwd:=pwd(‘10000’,’12345’,’22’,’yes’,’no’,’ok’,’all’,’hello’,’right’,’left’,’football’);
v_count integer;
BEGIN
v_count:=v_pwd.FIRST;
WHILE v_count<=v_pwd.LAST LOOP
DBMS_OUTPUT.PUT_LINE(v_pwd(v_count));
v_count:=v_pwd.NEXT(v_count);
END LOOP;
LOOP;
执行结果为
:
10000
12345
22
yes
no
ok
all
hello
right
left
football
8.TRIM
方法
:
用于删除集合末端的元素
,
其具体形式如下
1)TRIM:
不带参数的
TRIM
从集合中末端删除一个元素
2)TRIM(X)
是从集合的末端删除
X
个元素
,
其中
X
要小于集合的
COUNT
数
注意
:
与
EXTEND
一样
,
由于
index_by
表中元素的随意性
,
因此
TRIM
方法只对嵌套表和可变数组有效
.
分享到:
相关推荐
Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...
Oracle 集合操作详解 Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union ...
### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...
Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...
本资源涵盖知识(包括使用案例):Oracle集合运算,交集、并集、补集、差集. 集合运算就是将多个结果集组合成一个结果集。
### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...
### Oracle PL/SQL 集合详解 #### 12.1 集合概述 在深入了解Oracle PL/SQL中的集合之前,先回顾一下与集合相关的概念和术语,包括不同集合类型的描述及其示例。 ##### 12.1.1 集合概念和术语 **元素和索引值** -...
Oracle数据库系统提供了多种数据类型,其中包括了三种主要的集合数据类型:VARRAY(变量数组)、NESTED TABLE(嵌套表)和 Associative Array(关联数组,也称为INDEX BY TABLE)。这三种集合数据类型在存储和操作一...
本教程的"Oracle高级教程-深入学习集合"将详细阐述以上各个主题,并提供丰富的示例和练习,帮助读者熟练掌握Oracle集合的使用,进一步提升数据库管理与开发的专业水平。通过阅读并实践,你将能够更好地应对复杂的...
Oracle集合是PL/SQL编程中的一个重要概念,它们允许程序员存储一组相关的数据,这些数据可以是同类型的。集合有两种主要类型:VARRAY(变量数组)和嵌套表。 VARRAY是一种固定大小的集合,其大小在创建时就已经确定...
这是有关oracle的集合,供大家分享,虽然有很多错误,但也供大家讨论。
学Oracle的好东西,适合初学者,集合了大部分基本操作命令的实现
oracle 创建表空间和用户; oracle job的创建及相关命令; oracle 触发器或存储过程中执行外部exe程序; oracle 导入导出; oracle 删除所有表的数据; sqlserver 读取excel
在Oracle数据库管理中,经常会遇到各种错误,本文主要讨论了三个常见的Oracle错误及其解决方案。 首先,关于用户和修改用户密码的问题。Oracle数据库默认有一些预设的用户名和密码,例如Scott/tiger,System/...
oracle 常用命令_oracle 命令大全_oracle命令集合_oracle基本命令 非常方便,带查询功能,能很方便的查询你要找的oracle命令写法
在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...
"oracle日常巡检命令集合" Oracle日常巡检命令集合是数据库管理员最重要的工具之一,通过这些命令,可以检查数据库的状态、性能和安全性。以下是oracle日常巡检命令集合的详细说明: 检查数据库基本状况 1.1. ...
在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...
Oracle资料大全集合是一个涵盖Oracle数据库系统方方面面的综合资源包,对于学习、研究或者工作中需要处理Oracle相关问题的人员来说,是一份极其宝贵的参考资料。Oracle,作为全球广泛使用的大型关系型数据库管理系统...
6. **oci8_collection.c**:提供了对Oracle集合类型的支持,允许在PHP中操作Oracle的数组类型数据。 7. **CREDITS**:列出oci8扩展开发和贡献者的名单,体现了开源社区的协作精神。 8. **oci8.dsp**:可能是Visual...