PLSQL Language Referenc-PL/SQL集合和記錄-多維集合

LuiseDalian發表於2014-03-12

多維集合

儘管集合只有一維,但可以構造一個多維集合,即一個集合的元素也是集合。

 

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章