当前位置:   article > 正文

Oracle数据库 Oracle集合_oracle 集合

oracle 集合

一、Oracle集合的定义

集合是Oracle中的一种数据类型,存放一组数据类型相同的数据。

二、集合的组成

下标组成。
下标的类型包含 数字类型(整数类型、pls_integer和binary_integer) 和 字符串类型
的类型是数据库中所有的类型(基本数据类型、记录类型(record、%rowtype、%type)和集合类型)。
pls_integer和binary_integer相当于number类型,但比number类型占用内存较少、算术运算速度更快。
pls_integer进行的运算发生溢出时,会触发异常,执行是由硬件cpu来运行的,执行速度快.binary_integer不会触发异常,类型变量时由Oracle来执行的,不会溢出,但是执行慢,都是整形类型。

三、集合的类型

集合是一个比较广义的概念,在PL/SQL中提供了3种类型的集合:
索引表:可以通过数字或字符串作为下标来查找其中的元素,只能在PL/SQL中使用
嵌套表:拥有索引表的所有特性,但是下标只能是数据类型(连续的整数)。在PL/SQL和数据库中均可使用
变长数组:下标只能是数字类型,创建时需要指定最大长度。在PL/SQL和数据库中均可使用

集合常用的属性和方法

集合属性/方法 描述
first 取集合第一个元素的下标
last 取集合最后一个元素的下标
next(下标) 取集合当前元素的下一个元素的下标
prior(下标) 取集合当前元素的上一个元素的下标
count 得到集合中元素的个数
delete 删除集合中的元素
limit 去集合最大元素的个数(变长数组)

3.1 索引表类型

3.1.1 索引表的语法

--定义索引表类型的语法:
type 类型名称 is table of 元素值的数据类型 index by 下标的数据类型;
--索引变量的声明
变量名 类型名;
--索引变量的使用
变量名(下标);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.1.2 索引表的使用案例

案例1:定义一个索引表类型(下标为数字类型),用定义的索引表类型声明一个索引变量用于存放三个姓名,并输出存放的第一个姓名
declare
  type type1 is table of varchar2(30) index by pls_integer;
  names type1;
begin
  names(1):='小曹同学1';
  names(2):='小曹同学2';
  names(3):='小曹同学3';
  dbms_output.put_line(names(1));
end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
案例2:定义一个索引表类型(下标为字符串类型)并使用,测试集合的常用属性和方法
declare
  type type2 is table of varchar2(30) index by varchar2(10);
  names type2;
begin
  names('a'):='小曹同学1';
  names('b'):='小曹同学2';
  names('c'):='小曹同学3';
  dbms_output.put_line(names.first); --a
  dbms_output.put_line(names.last); --c
  dbms_output.put_line(names.next(names.first)); --b
  dbms_output.put_line(names.prior(names.last)); --b
  dbms_output.put_line(names.count); --3
  names.delete;
end;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3.1.3 语句循环遍历

集合提供了 bulk collect 语句获取表中数据。
通过 bulk collect 语句存入集合中的元素下标从1开始且是连续的,且集合下标必须是数字类型

语法1
select.. bulk collect into 集合变量 fromwhere条件
  • 1
--案例:
declare
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/766230
推荐阅读
相关标签
  

闽ICP备14008679号