ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Referenc-PL/SQL集合和记录-嵌套表

PLSQL Language Referenc-PL/SQL集合和记录-嵌套表

原创 Oracle 作者:LuiseDalian 时间:2014-03-12 07:08:12 0 删除 编辑

嵌套表

在数据库中,嵌套表是一种以不确定的顺序存储不确定数量的行的列类型。当从数据库获取嵌套表的值到PL/SQL嵌套表变量中,PL/SQL给行赋予从1开始的连续的索引。使用索引可以访问嵌套表变量中的单独的行。

variable_name(index)

当从数据库获取并存储嵌套表的时候,嵌套表的索引和行的顺序可能不会保持不变。

当增加或删除元素的时候,嵌套表变量占用的内存空间也会增加和减少。

一个未初始化的嵌套表是一个NULL集合。


DECLARE

    TYPE Roster IS TABLE OF VARCHAR2(15);  -- 嵌套表类型

    --使用构造器初始化嵌套表变量

    names Roster := Roster('AAAA', 'BBBB', 'CCCC', 'DDDD');

    PROCEDURE print_names (heading VARCHAR2) IS

    BEGIN

        DBMS_OUTPUT.PUT_LINE(heading);

        FOR i IN names.FIRST .. names.LAST LOOP  -- 循环所有元素

            DBMS_OUTPUT.PUT_LINE(names(i));

        END LOOP;

        DBMS_OUTPUT.PUT_LINE('---');

    END;

 

    BEGIN

    print_names('1:');

 

    names(3) := 'EEEE';  -- 改变元素的值

    print_names('2:');

 

    names := Roster('FFFF', 'GGGG');  -- 改变整个嵌套表

    print_names('3:');

END;

 

--独立的存储类型的嵌套表

CREATE OR REPLACE TYPE nt_type IS TABLE OF NUMBER;

/

CREATE OR REPLACE PROCEDURE print_nt (nt nt_type) IS

    i  NUMBER;

BEGIN

    i := nt.FIRST;

 

    IF i IS NULL THEN

        DBMS_OUTPUT.PUT_LINE('ntempty');

    ELSE

        WHILE i IS NOT NULL LOOP

            DBMS_OUTPUT.PUT('nt.(' || i || ') = ');

            print(nt(i));

            i := nt.NEXT(i);

        END LOOP;

    END IF;

 

    DBMS_OUTPUT.PUT_LINE('---');

END print_nt;

/

DECLARE

    nt nt_type := nt_type();  -- 嵌套表变量初始化为empty

BEGIN

    print_nt(nt);

    nt := nt_type(90, 9, 29, 58);

    print_nt(nt);

END;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1107986/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5676935