`
cjh820425
  • 浏览: 155500 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ORACLE集合

阅读更多

 

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.docx

    Oracle 集合操作函数 union、intersect、minus Oracle 集合操作函数是用于合并多条 SELECT 语句的结果的函数,包括 UNION、INTERSECT、MINUS 等。这些函数可以将多个查询结果合并成一个结果集,以便进一步处理和...

    oracle集合union、union all、intersect、minus

    Oracle 集合操作详解 Oracle 集合操作是指在数据库中对数据进行集合运算的操作,包括 union、union all、intersect 和 minus 等操作。这些操作可以对数据进行合并、交叉、差异等处理,提高数据处理效率。 union ...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.docx

    ### Oracle集合类型输出参数的PL/SQL存储过程及其Java调用 #### 1. 引言 存储过程因其高效执行、事务处理能力以及安全性,在数据库应用程序中被广泛应用。特别是使用Oracle数据库时,PL/SQL(一种专为Oracle设计的...

    Oracle集合类型输出参数的PLSQL存储过程及其Java调用.doc

    Oracle集合类型输出参数的PL/SQL存储过程及Java调用主要涉及如何在Oracle数据库中使用存储过程处理集合数据,并在Java应用中调用这些过程。本文档介绍了一种使用索引表作为输出参数的方法,以及如何在Java中处理返回...

    Oracle集合运算.pdf

    本资源涵盖知识(包括使用案例):Oracle集合运算,交集、并集、补集、差集. 集合运算就是将多个结果集组合成一个结果集。

    oracle sql集合

    ### Oracle SQL 集合知识点详解 #### 一、Oracle 安装完成后的初始口令 在Oracle数据库安装完成后,存在一系列预设的账号及其初始密码。这些账号对于数据库的安全性和管理至关重要。以下是一些常见账号及其初始口令...

    Oracle PLSQL集合

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

    Oracle三种集合数据类型的比较

    Oracle数据库系统提供了多种数据类型,其中包括了三种主要的集合数据类型:VARRAY(变量数组)、NESTED TABLE(嵌套表)和 Associative Array(关联数组,也称为INDEX BY TABLE)。这三种集合数据类型在存储和操作一...

    oracle 高级教程 深入学习集合!

    本教程的"Oracle高级教程-深入学习集合"将详细阐述以上各个主题,并提供丰富的示例和练习,帮助读者熟练掌握Oracle集合的使用,进一步提升数据库管理与开发的专业水平。通过阅读并实践,你将能够更好地应对复杂的...

    oracle 集合

    Oracle集合是PL/SQL编程中的一个重要概念,它们允许程序员存储一组相关的数据,这些数据可以是同类型的。集合有两种主要类型:VARRAY(变量数组)和嵌套表。 VARRAY是一种固定大小的集合,其大小在创建时就已经确定...

    oracle集合程序

    这是有关oracle的集合,供大家分享,虽然有很多错误,但也供大家讨论。

    Oracle基本操作集合

    学Oracle的好东西,适合初学者,集合了大部分基本操作命令的实现

    oracle 数据库操作 集合

    oracle 创建表空间和用户; oracle job的创建及相关命令; oracle 触发器或存储过程中执行外部exe程序; oracle 导入导出; oracle 删除所有表的数据; sqlserver 读取excel

    Oracle的错误集合

    在Oracle数据库管理中,经常会遇到各种错误,本文主要讨论了三个常见的Oracle错误及其解决方案。 首先,关于用户和修改用户密码的问题。Oracle数据库默认有一些预设的用户名和密码,例如Scott/tiger,System/...

    初学者必备oracle 1000个常用命令_oracle 命令大全_oracle命令集合

    oracle 常用命令_oracle 命令大全_oracle命令集合_oracle基本命令 非常方便,带查询功能,能很方便的查询你要找的oracle命令写法

    ORCL数据库相关文档.rar_ORCL数据集合_Oracle命令集合_busy7dm_globewxf_oracle

    在"ORCL数据库相关文档.rar"这个压缩包中,我们可以找到一系列关于Oracle数据库的重要资料,尤其是"Oracle命令集合"部分,它涵盖了Oracle数据库管理和操作的各种常见命令。 首先,创建实例是Oracle数据库管理的基础...

    oracle日常巡检命令集合

    "oracle日常巡检命令集合" Oracle日常巡检命令集合是数据库管理员最重要的工具之一,通过这些命令,可以检查数据库的状态、性能和安全性。以下是oracle日常巡检命令集合的详细说明: 检查数据库基本状况 1.1. ...

    Java调用oracle函数返回oracle类(类似)集合

    在Java中调用Oracle函数并处理返回的Oracle特定数据类型,如集合或索引表,通常涉及到Oracle的PL/SQL包和Java的JDBC驱动。以下是对这个主题的详细说明: 1. **Oracle索引表类型**: Oracle索引表是一种PL/SQL数据...

    Oracle资料大全(集合)

    Oracle资料大全集合是一个涵盖Oracle数据库系统方方面面的综合资源包,对于学习、研究或者工作中需要处理Oracle相关问题的人员来说,是一份极其宝贵的参考资料。Oracle,作为全球广泛使用的大型关系型数据库管理系统...

    oci8源码,编译安装php连接oracle扩展

    6. **oci8_collection.c**:提供了对Oracle集合类型的支持,允许在PHP中操作Oracle的数组类型数据。 7. **CREDITS**:列出oci8扩展开发和贡献者的名单,体现了开源社区的协作精神。 8. **oci8.dsp**:可能是Visual...

Global site tag (gtag.js) - Google Analytics