Oracle 复合数据类型基础知识

本文详细介绍了PL/SQL中的两种复合数据类型——记录和集合,特别是集合中的变长数组、嵌套表和关联数组(索引表)。它们在数据绑定、稀疏性和存储方式上有所区别。索引表是通过INDEX BY BINARY_INTEGER定义的,其特点是元素数量无限制且不能存储在数据库中。此外,文章还列举了各种集合操作的方法,如COUNT、DELETE、EXTEND等。
摘要由CSDN通过智能技术生成

一复合数据类型概述
PL/SQL 有两种复合数据结构:记录和集合。记录有不同的域组成,集合由不同的元素组成。在PL/SQL 中集合在定
义的时候必须使用TYPE 语句,然后才是创建和使用这种类型的变量。
集合类型: 变长数组( VARRAY ),嵌套表( NESTED_TAB) ,关联数组(索引表---INDEX_BY );其实也可以分为两
种,索引表是嵌套表的的拓展。
三种类型的相似处:

  • 都是一维的类似数组的结构
  • 都是内建的方法
  • 访问由点分割
     

三种类型的不同处:

  • 数据绑定:数据绑定涉及到集合中元素数量的限制,变长数组集合中的元素是的数量是有限制的,索引表和嵌套表则没有限制。
  • 稀疏性:稀疏性描述了集合的下标是否有间隙,索引表总是稀疏的;嵌套表开始是紧密的,但如果元素被删除了嵌套表可以是稀疏的,可以说嵌套表是相对于疏松;变长数组类型的集合是紧密的,它的下标之间没有间隔。
  • 存储方式:索引表不能存储在数据库中,但嵌套表和变长数组表可以被存储在数据库中。

索引表

索引表集合的定义语法如下: TYPE type_name IS TABLE OF element_type [NOT NULL] INDEX BY BINARY_INTE
RGET; 这里面最重要的关键字是INDEX BY BINARY_INTERGET ,没有这个关键字,那么集合将是一个嵌套表, element_ty
pe 可以是任何合法的PL/SQL 数据类型----(PLS/INTEGER ,SIGNTYPE 和BOOLEAN )。其他的集合类型对数据库的数据
类型都有限制,但索引表不能存储在数据库中,所以没有这些限制。

一旦定义了索引表,就可以向创建其他变量那样创建索引表的变量:如:
declare
type test_tab1 is table of varchar2(50) index by binary_integer;
v_test_tab test_tab1;
begin

复合类型的循环方法

    Lv_Index := Pt_Cols_Tbl.First;
    LOOP
      exit when Lv_Index is null;
      Pt_Cols_Tbl(Lv_Index);
      Lv_Index := Pt_Cols_Tbl.Next(Lv_Index);
    END LOOP;

方法描述使用限制
COUNT 返回集合中元素的个数
DELETE 删除集合中所有元素
DELETE() 删除元素下标为x 的元素,如果x 为null, 则集合保持不变对VARRAY 非法
DELETE(,) 删除元素下标从X 到Y 的元素,如果X>Y 集合保持不变对VARRAY 非法
EXISTS() 如果集合元素x(指下标或称为key值) 已经初始化,则返回TRUE, 否则返回FALSE
EXTEND 在集合末尾添加一个元素对Index_by 非法
EXTEND() 在集合末尾添加x 个元素对Index_by 非法
EXTEND(,) 在集合末尾添加元素n 的x 个副本对Index_by 非法
FIRST 返回集合中的第一个元素的下标号,对于VARRAY 集合始终返回1。
LAST 返回集合中最后一个元素的下标号, 对于VARRAY 返回值始终等于COUNT.
LIMIT 返回VARRY 集合的最大的元素个数,对于嵌套表和对于嵌套表和Index_by 为null Index_by 集合无用
NEXT() 返回在元素x 之后及紧挨着它的元素的值(指下标或称为key值),如果该元素是最后一个元素,则返回null.
PRIOR() 返回集合中在元素x 之前紧挨着它的元素的值,如果该元素是第一个元素,则返回null 。
TRI M 从集合末端开始删除一个元素对于index_by 不合法
TRIM() 从集合末端开始删除x 个元素对index_by 不合法

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值