定义嵌套表

嵌套表是对索引表的扩展,与索引表最大的不同在于嵌套表可以存储到ORACLE数据库表中,
而索引表仅仅是内存表。而且,嵌套表必须使用其构造方法对嵌套表进行初始化。嵌套表
没有INDEX BY子句,这个与索引表直接最明显的区别,因为嵌套表必须用有序的关键字创建,
而且关键字不能为负数。
索引表
7369  NULL 7521  7566  7902  7788
1     2    -5    120   KEY1  10
下标可以为正数,负数或字符串
嵌套表
7369  NULL 7521  7566  7902  7788
1     2    3     4     5     6   
下标必须为有序类型,不可以为负数,只能从1开始
高级语言数组
7369  NULL 7521  7566  7902  7788
1     2    3     4     5     6
下标只能为从0或1开始的连续数字
嵌套表的定义语法:
TYPE type_naem AS TABLE OF element_type[NOT NULL]
语法中各个部分的含义如下所示:
element_name:不超过30字符。
element_type:用于指定嵌套表元素的数据类型,可以是用户定义的对象类型,也可以是
使用%TYPE的表达好似,但是不可以是BOOLEAN,NCHAR,NCLOB,NVARCHAR2或REF CURSOR.
当使用嵌套表元素时,必须首先使用构造语法初始化嵌套表。
8.2.5
操纵嵌套表
由于在嵌套表使用之前必须进行构造,为构造的嵌套表被自动地赋初始值NULL,这与索引表不同,索引表
只是一种程序上的结构,而嵌套表是一种对象的类型,尽管他们都是PL/SQL表类型,但是在结构上有明显
的区别。
注:可以通过IS NULL来判断嵌套表是否已经被构造来使用嵌套表。
嵌套表的初始化与访问。
DECLARE
    TYPE emp_name_table IS TABLE OF VARCHAR2(20);--员工名称嵌套表
    TYPE deptno_table IS TABLE OF NUMBER(2);--部门编号嵌套表
    deptno_info deptno_table;
    emp_name_info emp_name_table := emp_name_table('张小3','李斯特');
BEGIN
    DBMS_OUTPUT.PUT_LINE('员工1:'||emp_name_info(1));--访问嵌套表元素
    DBMS_OUTPUT.PUT_LINE('员工2:'||emp_name_info(2));--访问嵌套表元素
    IF deptno_info IS NULL
    THEN
        deptno_info := deptno_table();
    END IF;
    deptno_info.EXTEND(5);--扩充元素的个数
    FOR i IN 1 .. 5 LOOP
        deptno_info(i):=i*10
    END LOOP;
    --显示部门个数
    DBMS_OUTPUT.PUT_LINE('部门个数:'||deptno_info.COUNT);8
END;
emp_name_info表在定义时使用了构造函数进行初始化,因为在构造函数中指定了两个元素,
根据嵌套表下标从1开始的原则,可以通过emp_name_info(1)和emp_name_info(2)访问这
两个元素。
deptno_info 首先通过IS NULL判断该嵌套表是否使用构造函数进行过初始化,然后调用构造
函数初始化deptno_info嵌套表,在这里并没有在构造函数中添加任何元素,这表示嵌套表中
没有任何元素,意思是指在嵌套表中没有预留任何内存空间来放置元素。如果为嵌套表中的
元素赋初值,Oracle会触发异常。
未分配元素并不表示元素已存在,为了向deptno_info嵌套表中插入元素,必须首先使用
嵌套表的EXTEND方法扩充指定的元素个数,然后才能通过下标进行访问。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值