PL/SQL 联合数组与嵌套表

本文介绍了在PL/SQL中处理单列多行数据的两种方式——联合数组和嵌套表。联合数组在Oracle 9i前称为PL/SQL索引表,声明时需指定index by,不需初始化;嵌套表需初始化,可以扩展尺寸,且能作为表列数据类型。两者都应以集合方式处理,但使用场景各有特点。
摘要由CSDN通过智能技术生成
               

      通常情况下,在PL/SQL中,处理单行单列的数据可以使用标量变量,而处理单行多列的数据则使用PL/SQL记录是不错的选择。单列多行数据
则由联合数组或嵌套表来完成,其特点是类似于单列数据库表。在Oracle 9i 之前称为PL/SQL索引表,9i 之后称之为联合数组。嵌套表也是集合
类型中的一种,下面分别介绍这两种集合数据类型的使用方法。

 

一、联合数组

1、联合数组的特性 类似于一张简单的SQL表,按照主键进行检索数据 其数据行并不是按照预定义的顺序存储。当使用变量来检索其数据时,每行数据会分配一个连续的下标且从1开始。 下标可以为负值,且下标的数据类型支持binary_integer,pls_integer,varchar2 其数据元素个数无限制 不能作为表列的数据类型使用,即只能作为PL/SQL复合数据类型使用 存放的数据类型是临时数据,故不支持insert,select intoSQL语句,等同于SQL server中的表变量  2、语法   TYPE type_name IS TABLE OF element_type [NOT NULL-->element_type为联合数组元数据指定数据类型(先使用TYPE声明表结构) INDEX BY key_type;                                  -->元素下标的数据类型 table_name TYPE_NAME;                               -->再使用声明的TYPE类型声明实际数组名  3、示例--使用PLS_INTEGE类型联合数组scott@CNMMBO> DECLARE                                   -->定义游标         2     CURSOR name_cur IS  3        SELECT dname  4        FROM   dept  5        WHERE  deptno < 40;  6    7     TYPE name_type IS TABLE OF dept.dname%TYPE      -->定义一个联合数组类型,且其下标的数据类型为PLS_INTEGER  8                          INDEX BY PLS_INTEGER;  9   10     dname_tab   name_type;                          -->声明类型为name_type的联合数组dname_tab 11     v_counter   INTEGER := 0; 12  BEGIN 13     FOR name_rec IN name_cur 14     LOOP 15        v_counter   := 16           v_counter 17           + 1; 18        dname_tab( v_counter ) := name_rec.dname;      -->对联合数据进行循环赋值 19        DBMS_OUTPUT.put_line(   'Dname is(' 20                             || v_counter 21                             || '):' 22                             || dname_tab( v_counter ) );   -->输出联合数组中的所有元素 23     END LOOP; 24  END; 25  /Dname is(1):ACCOUNTINGDname is(2):RESEARCHDname is(3):SALESPL/SQL procedure successfully completed.--使用VARCHAR2类型联合数组scott@CNMMBO> DECLARE  2     TYPE score_type IS TABLE OF NUMBER  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值