ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Referenc-PL/SQL集合和记录-多维集合

PLSQL Language Referenc-PL/SQL集合和记录-多维集合

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

多维集合

尽管集合只有一维,但可以构造一个多维集合,即一个集合的元素也是集合。

 

DECLARE  --二维可变数组(可以是锯齿形的)

    TYPE t1 IS VARRAY(10) OF INTEGER;  -- 整形动态数组

    va t1 := t1(1,2,3);

    TYPE nt1 IS VARRAY(10) OF t1;      -- 数组的数组

    nva nt1 := nt1(va, t1(4,5,6), t1(7,8), va);

    tmp INTEGER;  va1 t1;

BEGIN

    dbms_output.put_line('1');

    FOR i IN 1..nva.COUNT LOOP

        FOR j IN 1..nva(i).count LOOP

            dbms_output.put(nva(i)(j) || ', ');

        END LOOP;

        dbms_output.put_line(NULL);

    END LOOP;         

    nva.EXTEND;

    nva(5) := t1(9, 10);          -- 改变内部动态数组元素

    nva(4) := t1(11,12,13,14);    -- 改变内部动态数组元素

    nva(4)(4) := 15;                -- 14改变为15

    dbms_output.put_line('2');

    FOR i IN 1..nva.COUNT LOOP

        FOR j IN 1..nva(i).count LOOP

            dbms_output.put(nva(i)(j) || ', ');

        END LOOP;

        dbms_output.put_line(NULL);

    END LOOP; 

    nva(4).EXTEND;    -- 给第4个动态数组元素,扩展空间

    nva(4)(5) := 16;  -- 存储89   

    dbms_output.put_line('3');

    FOR i IN 1..nva.COUNT LOOP

        FOR j IN 1..nva(i).count LOOP

            dbms_output.put(nva(i)(j) || ', ');

        END LOOP;

        dbms_output.put_line(NULL);

    END LOOP; 

END;

--嵌套表的嵌套表

DECLARE

    TYPE tb1 IS TABLE OF VARCHAR2(20);  -- 字符串嵌套表

    vtb1 tb1 := tb1('AAAA', 'BBBB');

    TYPE ntb1 IS TABLE OF tb1; -- 嵌套表,它的元素为嵌套表

    vntb1 ntb1 := ntb1(vtb1);

    TYPE tv1 IS VARRAY(10) OF INTEGER;  -- 动态数组

    TYPE ntb2 IS TABLE OF tv1;            -- 嵌套表,元素为动态数组

    vntb2 ntb2 := ntb2(tv1(1, 2), tv1(3, 4, 5));

    str VARCHAR2(20);

    v_tb_tmp tb1;

BEGIN

    dbms_output.put_line('输出vntb1');

    FOR i IN 1..vntb1.count LOOP

        FOR j IN 1..vntb1(i).count LOOP

            dbms_output.put(vntb1(i)(j) || ', ');

        END LOOP;

        dbms_output.put_line(NULL);

    END LOOP;   

    dbms_output.put_line('输出vntb2');

    FOR i IN 1..vntb2.count LOOP

        FOR j IN 1..vntb2(i).count LOOP

            dbms_output.put(vntb2(i)(j) || ', ');

        END LOOP;

        dbms_output.put_line(NULL);

    END LOOP;   

    vntb1.EXTEND;

    vntb1(2) := vntb1(1);

    vntb1.DELETE(1);     -- 删除vntb1的第1个元素

    vntb1(2).DELETE(1);  -- 删除vnt1的第2个元素中的第1个字符串   

    dbms_output.put_line('输出vntb1');

    dbms_output.put_line(vntb1(2)(2));

END;

--关联数组的关联数组

DECLARE

    TYPE AssociateArray IS TABLE OF INTEGER INDEX BY PLS_INTEGER;  -- 关联数组

    v4 AssociateArray;

    v5 AssociateArray;

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

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

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5676681